通过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
相关推荐
浪裡遊1 小时前
Linux常用指令
linux·运维·服务器·chrome·功能测试
SugarPPig1 小时前
PowerShell 查询及刷新环境变量
服务器
段ヤシ.2 小时前
银河麒麟(内核CentOS8)安装rbenv、ruby2.6.5和rails5.2.6
linux·centos·银河麒麟·rbenv·ruby2.6.5·rails 5.2.6
深夜情感老师4 小时前
centos离线安装ssh
linux·centos·ssh
我的作业错错错4 小时前
搭建私人网站
服务器·阿里云·私人网站
王景程4 小时前
如何测试短信接口
java·服务器·前端
微网兔子5 小时前
伺服器用什么语言开发呢?做什么用什么?
服务器·c++·后端·游戏
一眼青苔6 小时前
切割PDF使用python,库PyPDF2
服务器·python·pdf
中云时代-防御可测试-小余7 小时前
高防IP是如何防护DDoS攻击和CC攻击的
运维·服务器·tcp/ip·安全·阿里云·ddos·宽度优先
网硕互联的小客服7 小时前
如何模拟黑客攻击(Red Teaming)以测试服务器安全性
运维·服务器