Bootstrap

通过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.以上配置没有问题,请邮件告知我,并将脚本代码(代码文件)邮件发送我

我的邮箱账号:[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

在这里插入图片描述

;