通过shell脚本分析部署nginx网络服务

通过shell脚本分析部署nginx网络服务

1.接收用户部署的服务名称

复制代码
read -p "请输入要判断的程序名称:" service_name

2.判断服务是否安装

复制代码
已安装;自定义网站配置路径为/www;并创建共享目录和网页文件;重启服务	

没有安装;安装对应的软件包

if  command -v $service_name &>/dev/null ;then
    echo "$service_name 已安装"
    web_root="/www"				--------------------------------自定义网站配置路径为/www
    config_file="/etc/nginx/conf.d/$service_name.conf"
    mkdir -pv $web_root         ---------------------------创建共享目录
    echo  "通过shell脚本分析部署nginx网络服务" > $web_root/index.html

    cat <<EOL >   $config_file
    server {  
        listen 192.168.111.130:80;
        #server_name    
        root /www;       
    }                           ---------------------------创建网页文件

EOL
    systemctl restart $service_name    --------------------------重启服务
    echo "服务已重启" 
else
    echo "$service_name未安装,请开始安装"
    dnf install $service_name -y          ----------------------------安装对应的软件包
    echo "安装完成"
    systemctl restart $service_name
fi

3.测试

判断服务是否成功运行;

复制代码
	已运行,访问网站

	未运行,提示服务未启动,并显示自定义的配置文件内容
	
	if  [ "$count" -gt 1 ] ;then
    echo $service_name服务运行
    curl 192.168.111.130         -------------------------已运行,访问网站
else
    echo $service_name服务未运行
    cat $config_file             ---------------------------未运行,提示服务未启动,并显示自定义的配置文件内容
fi

4.以上配置没有问题,请邮件告知我,并将脚本代码(代码文件)邮件发送我

我的邮箱账号:lxx1065372838@163.com

复制代码
-nail -s "$service_name 部署通知" -a /root/deploy_nginx.sh lxx1065372838@163.com <<< "$service_name >的部署和测试完成。"
echo "邮件已发送至 lxx1065372838@163.com。"

#!/bin/bash

#1.接收用户部署的服务名称
read -p "请输入要判断的程序名称:" service_name

#计算当前系统中与指定服务名称匹配的进程的数量
count=`ps -aux | grep -cw $service_name`
######################注释##################################
	a:显示所有用户的进程。
	u:以用户友好的格式显示进程(包括 CPU 和内存使用情况等信息)。
	x:包括没有控制终端的进程
	grep -cw $service_name:这个部分负责搜索 ps 输出中的特定服务名称,并返回匹配进程的数量
	-c:计数匹配的行。
	-w:确保所匹配的服务名称是完整的单词,防止部分匹配。
	count=`...` :这个语法用于将命令的输出结果赋值给变量 count。
######################注释###################################

#2.判断服务是否安装
if  command -v $service_name &>/dev/null ;then
    echo "$service_name 已安装"
    web_root="/www"
    config_file="/etc/nginx/conf.d/$service_name.conf"
    mkdir -pv $web_root
    echo  "通过shell脚本分析部署nginx网络服务" > $web_root/index.html
########################注释################################    
command -v $service_name &>/dev/null 是一行常用于 Bash 脚本的命令,用来检查一个指定的命令或程序是否可以在当前环境的 $PATH 中找到
详细解释
command -v:
command 是一个内置 Bash 命令,用于执行指定的命令并返回它的信息。
-v 选项表示返回命令的路径或简要信息。
如果该命令存在并且可执行,它会返回该命令的路径。

$service_name:
$service_name 是一个变量,应该包含您想要检查的服务或命令的名称(比如一个程序名)。

&>/dev/null:
&> 是一项 Bash 特性,用于将标准输出和标准错误都重定向到指定的地方。
/dev/null 是一个特殊的设备文件,任何写入到它的数据都会被丢弃,因此这种重定向可以有效地"静音"命令的输出。
这意味着如果命令 command -v $service_name 带来任何输出(成功找到命令或者出错信息),这些都不会显示在终端上。
########################注释################################
    
    cat <<EOL >   $config_file
    server {  
        listen 192.168.111.130:80;
        #server_name    
        root /www;       
    }  
EOL
#########################注释############################
cat <<EOL > $config_file 是用于创建一个多行的文本块并将其写入到 $config_file 指定的文件中。这个方法通常用于配置文件或其他多个行的文本输出  。
cat <<EOL: 这部分启动一个 heredoc,会将其后的内容直到 EOL 作为输入传递给 cat 命令。
> $config_file: 将 cat 命令的输出重定向到 $config_file 指定的文件中。
在 EOL 之前的行是您希望写入文件的内容。
#########################注释##############################
    systemctl restart $service_name
    echo "服务已重启"
else
    echo "$service_name未安装,请开始安装"
    dnf install $service_name -y
    echo "安装完成"
    systemctl restart $service_name
fi

#3.测试,判断服务是否成功运行;
if  [ "$count" -gt 1 ] ;then
    echo $service_name服务运行
    curl 192.168.111.130
else
    echo $service_name服务未运行
    cat $config_file
fi

#4.发送邮件
s-nail -s "$service_name 部署通知"  lxx1065372838@163.com <<< "$service_name >的部署和测试完成。"
echo "邮件已发送至 lxx1065372838@163.com。"
#################################
s-nail -s "主题" -a /path/to/attachment recipient@example.com < /dev/null
-a 选项附加文件
引号使用:目前在 <<< 中使用的引号是适当的,这可以确保 $service_name 被替换为实际的服务名称。
#################################

[root@localhost ~]# count=`ps -aux | grep -cw nginx`
[root@localhost ~]# echo $count
4
相关推荐
树℡独2 小时前
ns-3仿真之应用层(五)
服务器·网络·tcp/ip·ns3
嵩山小老虎3 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
Fleshy数模3 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
a41324473 小时前
ubuntu 25 安装vllm
linux·服务器·ubuntu·vllm
Configure-Handler3 小时前
buildroot System configuration
java·服务器·数据库
津津有味道4 小时前
易语言TCP服务端接收刷卡数据并向客户端读卡器发送指令
服务器·网络协议·tcp·易语言
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.4 小时前
Keepalived VIP迁移邮件告警配置指南
运维·服务器·笔记
Genie cloud5 小时前
1Panel SSL证书申请完整教程
服务器·网络协议·云计算·ssl
一只自律的鸡5 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
17(无规则自律)5 小时前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考