通过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
相关推荐
十五年专注C++开发11 分钟前
cargs: 一个轻量级跨平台命令行参数解析库
linux·c++·windows·跨平台·命令行参数解析
三坛海会大神5551 小时前
Linux服务器资源自动监控与报警脚本详解
linux·运维·服务器
向qian看_-_6 小时前
Linux 使用pip报错(error: externally-managed-environment )解决方案
linux·python·pip
yaoxtao7 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
fuyongliang1238 小时前
linux Nginx服务配置介绍,和配置流程
运维·服务器·网络
2501_9200470310 小时前
git在Linux中的使用
linux·git·elasticsearch
程序设计实验室10 小时前
在鸡哥14x上安装Linux:Fedora 42 上手体验
linux
UNbuff_010 小时前
Linux bzip2 命令使用说明
linux·运维·服务器
小马哥编程10 小时前
DNS解析中的服务器协作机制
服务器·git·github
IOT-Power10 小时前
Ubuntu下把 SD 卡格式化为 FAT32
linux·运维·ubuntu