【shell脚本】nginx服务管理及存活检测脚本实战
前言
今天终于敢说自己是csdn万粉博主了,感谢大家的厚爱,我会继续输出更多优质的好文章,一起学习。
座右铭: 先努力让自己发光,再帮助更多的人。
🏠 个人主页:我是沐风晓月
🧑 个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云博客专家 ,csdn万粉博主
😉😉 💕 座右铭:先努力成长自己,再帮助更多的人,一起加油进步
🍺🍺🍺 💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
文章目录
- 前言
- 1. 实现的功能
- 2. 脚本思路
- 3. 脚本代码
- 4. 测试
- 5. 脚本优化
- 总结
1. 实现的功能
- 实现自动管理nginx启动,停止和运行
- 实现检测配置文件是否正确
- 配置虚拟主机
2. 脚本思路
-
指定nginx工作路径:
nginx=/usr/local/nginx/sbin/nginx -
让用户输入要进行的操作,比如
start,stop,status,reload,true
其中:- start 表示启动nginx
- stop 表示停止服务
- status 表示查看nginx服务的状态
- reload 平滑加载配置文件
- true 判断配置文件是否正确
- restart 表示设置nginx重新启动,与平滑启动有区别
-
判断nginx是否已经启动
netstat -nlpt | grep nginx &> /dev/null && echo ok || echo "nginx stoped"
基于这个方法,我们可以使用if语句判断执行是否成功,执行成功结果: echo $?=0,否则就不为0;
- 使用case语句,指定
start,stop,status,reload,true,并进行相关的设置。
3. 脚本代码
#!/bin/bash
NGX=/usr/local/nginx/sbin/nginx
while true
do
read -ep "请输入要执行的命令(start/stop/status/restart/true/reload):" importcase $import in#启动nginx选项start)#先检测nginx是否已经启动netstat -nlpt | grep nginx &> /dev/nullif [ $? -eq 0 ];thenecho "nginx已经启动!"elseecho "开始启动nginx!"$NGX && echo "nginx 启动成功"fi;;#停止nginx运行stop)$NGX -s stop#判断nginx是否已经停止if [ $? -eq 0 ];thenecho "nginx已经停止运行!"elseecho "nginx停止失败,请重试!"fi;;#nginx的状态status)netstat -nlpt | grep nginx &> /dev/nullif [ $? -eq 0 ];thenecho "nginx已经启动!"elseecho "nginx没有运行!"fi;;#重载nginxreload)$NGX -s reloadif [ $? -eq 0 ];thenecho "nginx重载成功!"elseecho "nginx重载失败,请重试!"fi;;restart)$NGX -s stop && echo "nginx服务已经关闭"echo "正在重启服务"$NGX && echo "nginx 已经启动";;true)$NGX -t && echo "配置文件准确无误" || echo “配置文件出现问题,请进行查证”*)echo "请按提示正确输入!"echo -e "t start|stop|restart|status|reloadt";;
esac
done
4. 测试
- 给脚本执行权限
[root@mufeng41 ~]# vim ng.sh
[root@mufeng41 ~]# chmod +x ng.sh
[root@mufeng41 ~]# ./ng.sh
请输入要执行的命令(start/stop/status/restart/true/reload):start
nginx已经启动!
请输入要执行的命令(start/stop/status/restart/true/reload):status
nginx已经启动!
请输入要执行的命令(start/stop/status/restart/true/reload):reload
nginx重载成功!
请输入要执行的命令(start/stop/status/restart/true/reload):

5. 脚本优化
使用tput命令,设置终端特性,tput可以设置:
- 在屏幕上移动光标。
- 获取终端信息。
- 设置颜色(背景和前景)。
- 设置加粗模式。
- 设置反转模式等等
常见命令示例:
- tput clear # 清屏
- tput sc # 保存当前光标位置
- tput cup 10 13 # 将光标移动到 row col
- tput civis # 光标不可见
- tput cnorm # 光标可见
- tput rc # 显示输出
- exit 0
例如:
tput cup 5 1 将光标移动到第 5 列 (X) 的第 1 行 (Y)
要更改文本的颜色:
- setb 选项(用于设置背景颜色)
- setf 选项(用于设置前景颜色)
0 – Black,黑色1 – Red,红色2 – Green,绿色3 – Yellow,黄色4 – Blue,蓝色5 – Magenta,品红6 – Cyan,青色7 – White,白色
例如:
tput setb 6 tput setf 4
接下来,我们把上面的 脚本修改一下,变成有控制面板的。
代码示例:
[root@mufeng41 ~]# cat ng.sh
#!/bin/bash
NGX=/usr/local/nginx/sbin/nginx
##
# clear the screen
tput clear# Move cursor to screen location X,Y (top left is 0,0)
tput cup 3 15# Set a foreground colour using ANSI escape
tput setaf 3
echo "沐风nginx管理系统"
tput sgr0tput cup 5 17
# Set reverse video mode
tput rev
echo "CSDN-我是沐风晓月"
tput sgr0tput cup 7 15
echo "1. 开启nginx"tput cup 8 15
echo "2. 关闭nginx"tput cup 9 15
echo "3. 查看nginx状态"tput cup 10 15
echo "4. 重新加载配置文件"# Set bold mode
tput bold
tput cup 12 15
read -p "Enter your choice [1-4] " choice##
case $choice in#启动nginx选项1)#先检测nginx是否已经启动netstat -nlpt | grep nginx &> /dev/nullif [ $? -eq 0 ];thenecho "nginx已经启动!"elseecho "开始启动nginx!"$NGX && echo "nginx 启动成功"fi;;#停止nginx运行2)$NGX -s stop#判断nginx是否已经停止if [ $? -eq 0 ];thenecho "nginx已经停止运行!"elseecho "nginx停止失败,请重试!"fi;;#nginx的状态3)netstat -nlpt | grep nginx &> /dev/nullif [ $? -eq 0 ];thenecho "nginx已经启动!"elseecho "nginx没有运行!"fi;;#重载nginx4)$NGX -s reloadif [ $? -eq 0 ];thenecho "nginx重载成功!"elseecho "nginx重载失败,请重试!"fi;;*)echo "请按提示正确输入!";;
esac[root@mufeng41 ~]#
执行结果:

总结
在学习服务的过程中,脚本可以随时穿插,方便我们在学习上查缺补漏,及时复习学过的每一个语法。
💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 博客主页:mufeng.blog.csdn.net
💕 本文由沐风晓月原创,首发于CSDN博客
💕 全力以赴,持续学习,不负如来不负卿,喜欢的话记得点赞收藏哦
相关文章:
【shell脚本】nginx服务管理及存活检测脚本实战
前言 今天终于敢说自己是csdn万粉博主了,感谢大家的厚爱,我会继续输出更多优质的好文章,一起学习。 座右铭: 先努力让自己发光,再帮助更多的人。 🏠 个人主页:我是沐风晓月 🧑 个人…...
web服务器—nginx
一、nginx介绍Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。和apache一样,都是web服务器软件,因为其性能优异,所以被广大运维喜欢。又因…...
网络安全工具大合集
还是一句话,功夫再高,也怕菜刀首先,恭喜你发现了宝藏。本文章集成了全网优秀的开源攻防武器项目,包含:信息收集工具(自动化利用工具、资产发现工具、目录扫描工具、子域名收集工具、指纹识别工具、端口扫描…...
什么是SHA256?比特币是如何应用SHA256算法的?
SHA 256算法是一种具有确定性的单向哈希函数 算法是执行操作的一系列步骤或过程 哈希函数是种数学函数,输入的长度任意,但是输出长度固定,可以理解为文件的数字指纹,同一个输入值,总是得相同的输出 SHA256࿰…...
JDK20正式发布了GA版本,短期维护支持,以及JDK21预览
最近,Oracle发布了JDK20,相比对于Java开发者来说,JDK的发版是比较收关注的事情了,小简也来和大家一起了解了解JDK20发生了什么变化呢? 首先,JDK20是一个短周期版本,有6个月的维护时间࿰…...
.NET/C#/GC与内存管理(含深度解析)
详情请看参考文章:.NET面试题解析(06)-GC与内存管理 - 不灬赖 - 博客园 (cnblogs.com)一、对象创建及生命周期一个对象的生命周期简单概括就是:创建>使用>释放,在.NET中一个对象的生命周期:new创建对象并分配内存对象初始化…...
Java开发 | 内部类 | 静态内部类 | 非静态内部类 | 匿名内部类
目录 1.内部类 1.1内部类的简单创建 1.2内部类的分类 1.2.1普通内部类 1.2.2静态内部类 1.3匿名内部类 1.4局部内部类 1.内部类 内部类就是一是一个类里面装着另外一个类,就像俄罗斯套娃一样。最外层的类我们叫外部类,内层的类我们叫内部类。 1…...
Portal认证
Portal认证Portal认证简介Portal认证协议Portal认证方式Portal认证流程Portal认证用户下线Portal认证简介 定义: Portal认证通常也称作Web认证,一般将Portal认证网站成为门户网站。用户上网时,必须在门户网站进行认证,如果没有认…...
论文解读:ChangeFormer | A TRANSFORMER-BASED SIAMESE NETWORK FOR CHANGE DETECTION
论文地址:https://arxiv.org/pdf/2201.01293.pdf 项目代码:https://github.com/wgcban/ChangeFormer 发表时间:2022 本文提出了一种基于transformer的siamese网络架构(ChangeFormer),用于一对共配准遥感图…...
Redis 内存优化技巧
这次跟大家分享一些优化神技如何用更少的内存保存更多的数据?我们应该从 Redis 是如何保存数据的原理展开,分析键值对的存储结构和原理。从而继续延展出每种数据类型底层的数据结构,针对不同场景使用更恰当的数据结构和编码实现更少的内存占用…...
【java】笔试强训Day2【倒置字符串与排序子序列】
目录 ⛳选择题 1.A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明: 2.下面代码将输出什么内容:( ) 3.阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有&…...
【Linux】基础IO(一) :文件描述符,文件流指针,重定向
🍎作者:阿润菜菜 📖专栏:Linux系统编程 码字不易,请多多支持😘😘 这是目录重新认识文件系统内部的文件操作我们C语言的文件操作系统内部的文件操作OS一般会如何让用户给自己传递标志位的&#x…...
【C语言】通讯录的实现(静态版)
【C语言】通讯录的实现(静态版一.前言1.前期准备a.菜单实现b.联系人结构体的构建c.菜单选项的功能d.#define 的定义2.功能的实现a.初始化通讯录b.增加联系人c.显示通讯录d.查找联系人e.修改联系人d.删除联系人3. 总代码test.ccontact.ccontact.h一.前言 本文将会用c语言实现一…...
IDEA一键构建Docker镜像
效果 Idea右击Dockerfile文件,直接在服务器构建docker镜像 开整 1、下载docker插件 2、编写Dockerfile文件 # 基础镜像 FROM openjdk:8-jdk-alpine # 工作目录 WORKDIR /opt/apps/gateway/logs/ # 文件拷贝,把target目录下的jar报拷贝到镜像的/APP/目录下 ADD…...
QT的使用3:鼠标事件
鼠标事件0 事件1 需求2 查看控件的事件处理函数3 UI设计4 新建一个类,继承QLabel5 对已有对象进行类型提升6 重写事件处理函数7 项目进一步拓展(1)获取鼠标按键(2)鼠标移动(3)显示多个按键&…...
线程安全之单例模式
文章目录前言一.什么是单例模式二.在java中的单例模式2.1 饿汉式的介绍2.2 懒汉式的介绍三 懒汉式的单例模式,线程不安全的解决方式3.1 造成线程不安全的原因3.2 解决方案3.3 总结前言 这篇文章,我们会介绍一下单例模式,但这里的单例模式,不是我们所说的设计模式,当然听到设计…...
“二分”带来“十分”快感——二分思想的奥秘解析
文章目录无处不在的二分思想二分查找惊人的查找速度二分查找的递归与非递归实现1.循环退出条件2.mid的取值3.low和high的更新最后说一句🐱🐉作者简介:大家好,我是黑洞晓威,一名大二学生,希望和大家一起进…...
一台服务器最大能支持多少条 TCP 连接?问倒一大片。。。
一台服务器最大能打开的文件数 限制参数 我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是: fs.file-max (系统级别参数)…...
蓝桥杯嵌入式RTC实时时钟
文章目录 前言一、RTC是什么二、cubemx的配置三、函数的使用总结前言 本篇文章将给大家介绍RTC实时时钟。 一、RTC是什么 STM32的实时时钟RTC是一个独立的定时器,RTC时钟内部依靠BCD码计数。RTC实时时钟提高时钟、闹钟、日历功能。RTC功耗较低,可以使用在低功耗设备上。 …...
Centos7 挂载 ISO镜像
切到mnt目录:cd /mnt mkdir iso确保centos镜像在服务上存在,磁盘挂载mount -o loop /home/xx.iso /mnt/iso查看是否挂载成功df -h出现红色的部分表示挂载成功修改源切目录并修改yum源:cd /etc/yum.repos.dllvim Centos-Base.repo修改后yum clean allyum list安装lrz…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
