Linux脚本练习

通过shell脚本分析部署nginx网络服务

1.接收用户部署的服务名称

2.判断服务是否安装

​    已安装;自定义网站配置路径为/www;并创建共享目录和网页文件;重启服务    

​    没有安装;安装对应的软件包

3.测试

 判断服务是否成功运行;

​        已运行,访问网站

​        未运行,提示服务未启动,并显示自定义的配置文件内容

4.以上配置没有问题,请邮件告知我,并将脚本代码(代码文件)邮件发送我

我的邮箱账号:xxxxxx@163.com

一、整体流程分析

  1. 接收用户输入:脚本首先需要接收用户输入的要部署的服务名称,以此来确定后续针对该服务(这里明确是 nginx)的操作。
  2. 服务安装状态判断及处理
    • 已安装情况:如果判断出 nginx 已经安装,那么需要进行一系列自定义配置操作,包括设定自定义网站配置路径(这里指定为 /www),并且在该路径下创建共享目录以及网页文件,最后还要重启 nginx 服务。
    • 未安装情况:若发现 nginx 未安装,则要执行相应的安装操作
  3. 服务运行状态测试及处理:在完成前面的安装或配置操作后,需要测试 nginx 服务是否成功运行。
    • 已运行情况:如果 nginx 服务已运行,告知用户可以通过浏览器访问网站。
    • 未运行情况:若 nginx 服务未运行,除了提示服务未启动外,还需要显示自定义的配置文件内容(这里应该是指之前创建的网页文件内容等),以便用户进一步排查问题。
  4. 邮件通知及脚本发送:当完成上述所有关于 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 服务,以使前面的配置更改生效。

未安装情况

  • 确认安装状态:与已安装情况判断相反
  • 安装对应的软件包
    • 执行安装命令
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

  • 是一个特殊的变量,在 Shell 脚本中它代表当前正在执行的脚本文件本身的名称(包括扩展名,如果有的话)
    • 例如,如果你的脚本文件名为 test.sh,那么在脚本执行过程中,$0 的值就是 test.sh
  • 发送邮件:使用mails-nail命令来发送邮件,需要指定邮件主题、收件人邮箱地址以及附件等相关信息。

5.邮箱部署

#挂载
[root@localhost yangjunjie]# mount /dev/sr0 /mnt
#安装邮件服务、
[root@server ~]#dnf   install  s-nail  -y
#配置邮件服务
[root@localhost yangjunjie]# vim  /etc/s-nail.rc

a8c77b1214b14429ba1fb3b343545d51.png

#测试邮件服务
[root@localhost yangjunjie]# echo 邮件内容:我是作业 | mail -s 主题 xxxxxx@163.com

三、实验操作

[root@Server ~]# cat test5.sh 
#!/bin/bash# 接收用户输入的服务名称
read -p "请输入要部署的服务名称: " service_name# 判断输入的服务名称是否为nginx
if [ "$service_name" != "nginx" ]; thenecho "请输入正确的服务名称(nginx)"#终止脚本运行exit 1
fi
#################################################################
#使用which命令检查nginx是否已经安装
if which nginx &>/dev/null; thenecho "Nginx已安装"# 创建自定义网站配置路径及共享目录和网页文件website_path="/www"#使用-p选项确保即使父目录不存在也能创建成功mkdir -p $website_pathtouch $website_path/index.htmlecho "this is test" > $website_path/index.html# 重启nginx服务systemctl restart nginxelseecho "Nginx未安装,接下来将开始安装nginx"#配置挂载点mount /dev/sr0 /mntdnf install nginx -yfi#################################################################
# 测试nginx服务是否成功运行
if systemctl is-active nginx &>/dev/null; thenecho "Nginx服务已运行,可通过浏览器访问网站"
elseecho "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 ~]# 

运行脚本

d4eeeaac126647e192ae7cd44abed028.png

 邮箱测试(自己的)

0a764964b08e4d0fba4e9285905c94d1.png

网页测试

关闭防火墙和SElinux
[root@Server ~]# systemctl stop firewalld
[root@Server ~]# setenforce 0
修改配置文件
[root@Server ~]# vim  /etc/nginx/nginx.conf

0111b13bc17b4c969d6e3ba5f8a3e6f8.png

7bce8e31764148fd875a7e79384416f6.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19568.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统编程 - 进程间通信

文章目录 前言概述发送消息WM_COPYDATADLL共享段文件映射文件映射步骤相关API讲解文件映射 进程间的通信(有文件版本)文件映射 进程间的通信(匿名版本) 管道相关API讲解父子之间的匿名进程通信GetStdHandleSTARTUPINFO指定句柄测试…

基于yolov8、yolov5的植物类别识别系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 , 直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有 GPU&#xff0…

1+X应急响应(网络)系统信息收集分析:

系统信息收集分析: 系统启动项和计划任务分析: 系统进程,服务分析: 内存取证: 系统崩溃转储:

智慧环保平台_大数据平台_综合管理平台_信息化云平台

系统原理   智慧环保是新一代信息技术变革的产物,是信息资源日益成为重要生产要素和信息化向更高阶段发展的表现,是经济社会发展的新引擎。   现今,环保信息化建设进入高速发展阶段。在此轮由物联网掀起的信息浪潮下,环境信息…

如何通过电脑监控软件远程监控一台电脑的所有屏幕画面记录

7-1 本教程介绍一个简单的工具,可以安装在电脑中,按设置的时间间隔,自动对屏幕截图保存,并且可以在有网络的其它电脑上远程提取截图文件。 该软件用于自动记录电脑的屏幕画面内容和变化,如果你有这方面的使用场景&am…

深度解读混合专家模型(MoE):算法、演变与原理

假设一个专家团队共同解决复杂问题。每位专家都拥有独特的技能,团队通过高效分配任务实现了前所未有的成功。这就是混合专家(Mixture-of-Experts,MoE)模型架构背后的基本思想,这种方法允许机器学习系统,特别…

电商微服务项目第一天(品牌管理)

1.BaseTrademarkController&#xff08;品牌管理CRUD&#xff09; /*** 添加品牌* param baseTrademark* return*/PostMapping("baseTrademark/save")public Result<BaseTrademark> save(RequestBody BaseTrademark baseTrademark){baseTrademarkService.save(…

初探Ranking系统的离在线满意度评估

【引子】在上周发布了《大模型应用系列&#xff1a;从Ranking到Reranking》之后&#xff0c; 有AI 产品经理问我&#xff0c;如何评估Ranking 系统的性能呢&#xff1f; 再进一步&#xff0c;如何评估RAG系统的性能呢&#xff1f; 老码农整理了一下在搜索引擎方面的感受&#x…

初识C++ (五)

没事干就学习 auto关键字 auto是C程序设计语言的关键字。自C11以来&#xff0c;auto关键字用于两种情况&#xff1a;声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。C98标准中auto关键字用于自动变量的声明&#xff0c;但由于使用极少且多余…

shell脚本判断nginx安装和运行

shell脚本判断nginx安装和运行 脚本内容&#xff1a; 传入服务名称&#xff1a; read -p "请输入要判断的程序名称:" service_name 查看服务进程&#xff1a; countps -aux | grep -cw $service_name 判断nginx是否安装&#xff08;系统中是否有nginx命令&#xff…

电脑msvcr100.dll丢失的解决方法,详细介绍多个解决方法

由于系统中关键文件msvcr100.dll的缺失&#xff0c;用户可能会遭遇一系列始料未及的困扰与问题。msvcr100.dll是Microsoft Visual C运行库中的一个核心动态链接库文件&#xff0c;对于许多应用程序的正常运行至关重要。当这个特定的dll文件丢失时&#xff0c;可能会导致部分软件…

Windows安装vcpkg教程(VS2022)

内容摘要&#xff1a; 本文详细介绍如何在Windows系统上使用 Git 克隆 vcpkg 仓库来安装vcpkg工具&#xff0c;并链接Visual Studio 2022。 目录 一、关于vcpkg 二、开发环境 三、安装Git 四、使用 Git 克隆 vcpkg 仓库 一、关于vcpkg vcpkg 是一个开源的 C 包管理工具&am…

TypeScript泛型基础知识

1.1 泛型 泛型是可以在保证类型安全的前提下&#xff0c;让函数等与多种类型一起工作&#xff0c;从而实现复用&#xff0c;常用于&#xff1a;函数、接口、class中。 需求&#xff1a;创建一个id函数&#xff0c;传入什么数据就返回该数据本身&#xff08;也就是说&#xff0c…

多线程的安全问题

什么是线程安全问题&#xff1f; 多个线程&#xff0c;访问同一资源&#xff0c;出现了问题&#xff0c;就是线程安全问题&#xff08;数据不准确&#xff0c;或者直接报错&#xff09; 1&#xff09;错误演示&#xff1a; public class Demo04 {static int tickedNum 100;/…

推荐一套相片复原工具:Focus Magic

Focus Magic是一套相片复原工具&#xff0c;能够帮助你修补及强化那些模糊不清楚的影像。其他那些锐利化工具只能够修补那些只有一点模糊的相片&#xff0c;但有了Focus Magic你就可以把那些根本完全没对准焦距的相片重新对准焦距。程序还可以以插件的形式作为其他图形处理工具…

C++:类的继承

在C中&#xff0c;类的继承是一种面向对象编程&#xff08;OOP&#xff09;的重要特性&#xff0c;它允许一个类&#xff08;子类或派生类&#xff09;继承另一个类&#xff08;基类或父类&#xff09;的属性和方法。通过继承&#xff0c;可以重用现有的代码&#xff0c;减少重…

详细解读Gson 、Jackson 、FastJson 三大json序列化工具

一 gson Google提供的用来java对象和JSON数据之间进行映射的JAVA类库 优缺点 优点&#xff1a;快速、高效&#xff0c; 依赖少只有一个jar包&#xff0c;面向对象&#xff0c;数据传输解析方便 缺点&#xff1a;速度较慢 mvn依赖 <dependency><groupId>com.go…

版块控制---git

引入 设想&#xff0c;当我们写论文时&#xff0c;对第一版不够满意时&#xff0c;想做出修改但是又怕修改时回毁掉整个论文版本&#xff0c;所以我们通常会进行备份&#xff0c;以防止数据被修改后的崩毁&#xff0c;版块控制就是这个合理创建管理备份的过程&#xff0c;而且这…

BLE 蓝牙客户端和服务器连接

蓝牙通信在设计小型智能设备时非常普遍&#xff0c;之前一直没有使用过&#xff0c;最近使用ardunio ESP32 做了一些实验&#xff0c;做了一个收听播客的智能旋钮&#xff08;Smart Knob&#xff09;&#xff0c;它带有一个旋转编码器和两个按键。 本文介绍BLE 服务器Server和W…

图(Graph)的概念和遍历

目录 定义 相关概念 无向图&#xff08;Undirected graphs) 有向图&#xff08;Directed graphs&#xff09; 完全图 稀疏图 稠密图 权&#xff08;Weight&#xff09; 网&#xff08;Network&#xff09; 子图&#xff08;Subgraph&#xff09; 图的顶点与边间关系 …