通过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.以上配置没有问题,请邮件告知我,并将脚本代码(代码文件)邮件发送我
我的邮箱账号:[email protected]
-nail -s "$service_name 部署通知" -a /root/deploy_nginx.sh [email protected] <<< "$service_name >的部署和测试完成。"
echo "邮件已发送至 [email protected]。"
#!/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 部署通知" [email protected] <<< "$service_name >的部署和测试完成。"
echo "邮件已发送至 [email protected]。"
#################################
s-nail -s "主题" -a /path/to/attachment [email protected] < /dev/null
-a 选项附加文件
引号使用:目前在 <<< 中使用的引号是适当的,这可以确保 $service_name 被替换为实际的服务名称。
#################################
[root@localhost ~]# count=`ps -aux | grep -cw nginx`
[root@localhost ~]# echo $count
4