通过shell脚本分析部署nginx网络服务
1.接收用户部署的服务名称
2.判断服务是否安装
已安装;自定义网站配置路径为/www;并创建共享目录和网页文件;重启服务
没有安装;安装对应的软件包
3.测试
判断服务是否成功运行;
已运行,访问网站
未运行,提示服务未启动,并显示自定义的配置文件内容
4.以上配置没有问题,请邮件告知我,并将脚本代码(代码文件)邮件发送我
我的邮箱账号:xxxxxx@163.com
一、整体流程分析
- 接收用户输入:脚本首先需要接收用户输入的要部署的服务名称,以此来确定后续针对该服务(这里明确是 nginx)的操作。
- 服务安装状态判断及处理 :
- 已安装情况 :如果判断出nginx 已经安装,那么需要进行一系列自定义配置操作,包括设定自定义网站配置路径(这里指定为**/www**),并且在该路径下创建共享目录以及网页文件,最后还要重启 nginx 服务。
- 未安装情况:若发现 nginx 未安装,则要执行相应的安装操作
- 服务运行状态测试及处理 :在完成前面的安装或配置操作后,需要测试 nginx 服务是否成功运行。
- 已运行情况:如果 nginx 服务已运行,告知用户可以通过浏览器访问网站。
- 未运行情况:若 nginx 服务未运行,除了提示服务未启动外,还需要显示自定义的配置文件内容(这里应该是指之前创建的网页文件内容等),以便用户进一步排查问题。
- 邮件通知及脚本发送:当完成上述所有关于 nginx 部署及测试的操作后,如果整个过程没有问题,需要通过邮件告知用户,并且要将脚本代码本身作为附件一并发送给用户。
二、具体步骤分析
1. 接收用户部署的服务名称
通过read命令来提示用户输入要部署的服务名称,并将用户输入的内容存储到一个变量中,以便后续进行判断和处理。
2. 判断服务是否安装及相应处理
已安装情况
- 确认安装状态 :可以使用which nginx 命令来检查 nginx 是否已经安装。如果该命令执行后输出为空(通过重定向**
>
/dev/null 2>&1**将标准输出和错误输出都丢弃,若有输出说明找到了可执行文件,即已安装),则说明 nginx 已安装。
which"命令会查找 "nginx" 这个命令在系统中的可执行文件路径
如果系统中已经安装了 Nginx,那么它会返回 Nginx 可执行文件所在的路径
如果系统中没有安装 Nginx,那么它通常不会返回任何内容
标准输出 一般用于输出命令正常执行的结果------用文件描述符1表示
标准错误输出 则用于输出命令执行过程中出现的错误信息------用文件描述符2表示
> :用于将标准输出重定向到一个指定的文件或设备。例如 ,echo "Hello" > file.txt会把 "Hello" 这句话的输出从默认的终端显示重定向到file.txt文件中,也就是会创建或覆盖file.txt` 文件并写入 "Hello"
>> :与 ">类似,但它是追加模式 ,即如果指定的文件已经存在,不会覆盖原有内容,而是在文件末尾追加新的内容
**/dev/null :**数据黑洞,任何写入其中的数据都会被丢弃
- 自定义配置操作 :
- 创建自定义网站配置路径 :使用mkdir -p 命令创建指定的网站配置路径(/www),
-p
选项确保即使父目录不存在也能创建成功。 - 创建共享目录和网页文件 :在已创建的网站配置路径下,使用
touch
命令创建一个网页文件(如index.html
),并通过重定向操作(如echo "this is test">
)向该网页文件写入一些测试内容。 - 重启服务 :使用systemctl restart nginx命令来重启 nginx 服务,以使前面的配置更改生效。
- 创建自定义网站配置路径 :使用mkdir -p 命令创建指定的网站配置路径(/www),
未安装情况
- 确认安装状态:与已安装情况判断相反
- 安装对应的软件包 :
- 执行安装命令
bash
mount /dev/sr0 /mnt
dnf install nginx -y
3. 测试服务是否成功运行及相应处理
已运行情况
- 使用systemctl is-active nginx命令来检查 nginx 服务是否处于活动状态(即已运行)。如果该命令执行后输出为空(同样通过重定向丢弃输出,若有输出说明服务未运行),则说明 nginx 服务已运行,此时告知用户可通过浏览器访问网站。
未运行情况
- 若**
systemctl is-active nginx
**命令执行后输出有内容,说明 nginx 服务未运行。此时除了提示服务未启动外,还需要显示自定义的配置文件内容。
4. 邮件告知及脚本发送
- 邮件设置 :
- 确定邮件主题
- 编写邮件正文
- 指定附件 :要将脚本代码本身作为附件发送,需要获取脚本文件的当前路径和文件名((pwd)/(basename $0) ),并将其作为附件指定给邮件。
(pwd)/(basename $0)
构建出了当前脚本文件在文件系统中的完整路径及文件名
例如,如果当前工作目录是 /home/user/scripts 且脚本文件名为 test.sh,那么 (pwd)/(basename $0) 就等于 /home/user/scripts/test.sh
pwd获取当前工作目录路径
basename
- 是一个用于获取路径中的文件名部分的命令
- 基本用法是basename [路径] ,当给定一个完整的路径时,它会返回该路径中的文件名部分
- 例如,对于路径 /home/user/Documents/test.sh,执行 basename /home/user/Documents/test.sh 会返回 test.sh
- 如果只给定一个文件名(没有路径部分),它就直接返回该文件名本身
$0
- 发送邮件 :使用mail
或
s-nail命令来发送邮件,需要指定邮件主题、收件人邮箱地址以及附件等相关信息。
5.邮箱部署
bash
#挂载
[root@localhost yangjunjie]# mount /dev/sr0 /mnt
#安装邮件服务、
[root@server ~]#dnf install s-nail -y
bash
#配置邮件服务
[root@localhost yangjunjie]# vim /etc/s-nail.rc
bash
#测试邮件服务
[root@localhost yangjunjie]# echo 邮件内容:我是作业 | mail -s 主题 xxxxxx@163.com
三、实验操作
bash
[root@Server ~]# cat test5.sh
#!/bin/bash
# 接收用户输入的服务名称
read -p "请输入要部署的服务名称: " service_name
# 判断输入的服务名称是否为nginx
if [ "$service_name" != "nginx" ]; then
echo "请输入正确的服务名称(nginx)"
#终止脚本运行
exit 1
fi
#################################################################
#使用which命令检查nginx是否已经安装
if which nginx &>/dev/null; then
echo "Nginx已安装"
# 创建自定义网站配置路径及共享目录和网页文件
website_path="/www"
#使用-p选项确保即使父目录不存在也能创建成功
mkdir -p $website_path
touch $website_path/index.html
echo "this is test" > $website_path/index.html
# 重启nginx服务
systemctl restart nginx
else
echo "Nginx未安装,接下来将开始安装nginx"
#配置挂载点
mount /dev/sr0 /mnt
dnf install nginx -y
fi
#################################################################
# 测试nginx服务是否成功运行
if systemctl is-active nginx &>/dev/null; then
echo "Nginx服务已运行,可通过浏览器访问网站"
else
echo "Nginx服务未启动"
echo "以下是自定义配置文件内容:"
cat $website_path/index.html
fi
#################################################################
#mail -s 邮件主题 s-nail 与之相同
#mail -a 添加附件
attachment="$(pwd)/$(basename $0)"
echo "脚本代码------杨俊杰" | s-nail -s "Linux练习作业" -a "$attachment" lxx1065372838@163.com
[root@Server ~]#
运行脚本
邮箱测试(自己的)
网页测试
bash
关闭防火墙和SElinux
[root@Server ~]# systemctl stop firewalld
[root@Server ~]# setenforce 0
bash
修改配置文件
[root@Server ~]# vim /etc/nginx/nginx.conf