当前位置:首页 > 技术分享 > 正文内容

Nginx服务崩溃自动重启脚本(监控进程服务并自动重启进程服务)脚本

admin3年前 (2021-04-01)技术分享2517

有一台服务器运行着Ngin最近突然有一次崩溃,导致使用方当天无法访问网页端,然后我不得不登录服务器,检查各项服务,发现nginx崩溃了,于是重启Nginx,问题解决。

后来为了防止Nginx再发生这种情况给运维带来的运维成本,于是写了一个脚本,放到Linux计划任务里进行监听管理Nginx服务,一旦崩溃,那么就自动重启Nginx服务。当然该脚本适合各种后台服务,可以简单修改,适应各种后台服务程序。

首先编写shell脚本service-restart.sh

方法一

#! /bin/bash
# service-restart.sh
# description: 这个程序用来监控服务器服务软件,以程序挂掉后重启 Author is xiaogg
# ! /bin/sh

phpfpm_procnum=`ps -ef|grep "php-fpm"|grep -v grep|wc -l`
nginx_procnum=`ps -ef|grep "nginx"|grep -v grep|wc -l`
mysql_procnum=`ps -ef|grep "mysqld"|grep -v grep|wc -l`
redis_procnum=`ps -ef|grep "redis"|grep -v grep|wc -l`

if [ $phpfpm_procnum -eq 0 ]
then
	echo "start php-fpm..."
	/etc/init.d/php-fpm start >> /var/log/listen_service_start.log 2>&1
elif [ $nginx_procnum -eq 0 ]
then 
	echo "start nginx..."
	/usr/local/nginx/sbin/nginx >> /var/log/listen_service_start.log 2>&1
elif [ $mysql_procnum -eq 0 ]	
then 
    echo "start mysql..."
    systemctl start mysqld >> /var/log/listen_service_start.log 2>&1
elif [ $redis_procnum -eq 0 ]
then 
    echo "start redis..."
    systemctl start redis >> /var/log/listen_service_start.log 2>&1
else 
	#echo "no cmd"
	exit
fi


其实主要内容就是

检查监听服务是否还正常

对运行不正常的服务进行重启

主要写了 php-fpm nginx mysqld redis 如果不需要就把相关行删除或注释

方法二

#! /bin/bash
# service-restart.sh
# description: 这个程序用来监控端口是否通畅,不通后重启 Author is xiaogg
# ! /bin/sh

if [ $(id -u) != "0" ]
then
        echo "Not the root user! Try using sudo command!"
        exit 1
fi

netstat -anop | grep 0.0.0.0:80
if [ $? -ne 1 ]
then
        exit
fi
 
echo $(date +%T%n%F)" Restart nginx Services " >> service_start.log
#/usr/local/nginx/sbin/nginx
/etc/init.d/php-fpm restart
/bin/systemctl restart nginx.service

说明该方法主要是监控端口还判断是否通畅.

第一步先验证是否是root  这一步完全可以省略

第二步会重启并添加日志


方法三

#! /bin/bash
# service-restart.sh
# description: 这个程序用来监控网址是否返回200状态,不是后重启 Author is xiaogg
# ! /bin/sh

url=http://blog.bitefu.net

check_http(){
  status_http=$(curl -m 5 -s -I $url | grep HTTP | awk '{print $2}')
}
check_http
if [ "$status_http" != "200" ]
then
    echo $(date +%T%n%F)" Restart nginx Services " >> service_start.log
	#/usr/local/nginx/sbin/nginx
	/etc/init.d/php-fpm restart
	/bin/systemctl restart nginx.service
else
    #echo "no cmd"
	exit
fi

方法三原理说明

该方法主要是监控域名状态码 是不是200 如果不是就去重启服务


几种方法侧重点不一样可以结合到一起使用


加入Linux crontab自动任务里即可:

crontab -e 
*/1 * * * * sh /root/service-restart.sh

第一行是编辑计划任务

第二行添进去保存就行了可以通过crontab -l查看是否添加成功

第二行添加的是每分钟执行



扫描二维码推送至手机访问。

版权声明:本文由小刚刚技术博客发布,如需转载请注明出处。

本文链接:http://blog.bitefu.net/post/154.html

分享给朋友:

相关文章

thinkphp等框架开发中容易忽略的xss攻击及应对XSS攻击方法

thinkphp等框架开发中容易忽略的xss攻击及应对XSS攻击方法

虽然说现在的web开发框架都是挺成熟的框架,在性能、安全等方面都有比较好的表现,但问题往往出现在业务逻辑上,如上周我再公司发现的一个跨站脚本攻击,(通常公司是这么过滤的,max(0,$_GET[‘a’])、strip_tags($_GET[...

WPS表格办公—取消科学计数法显示

WPS表格办公—取消科学计数法显示

我们在利用WPS表格与Excel表格进行日常办公时,经常需要制作各种各样的表格,当我们在表格当中输入长数据的时候,表格经常会自动显示为科学计数法,很多人都看不懂科学计数法的意思,那么,我们如何在输入长数字的时候避免显示为科学计数法呢,今天我...

2021可用的百度网盘高速下载方法分享

2021可用的百度网盘高速下载方法分享

最新可用方法http://blog.bitefu.net/post/163.html方法很简单就是利用网盘直链下载助手【网盘直链下载助手】是一款免费开源获取网盘文件真实下载地址的油猴脚本,基于PCSAPI,支持Windows,Mac,Lin...

系统小技巧:微软版“Ghost” Windows FFU 系统安装还原

系统小技巧:微软版“Ghost” Windows FFU 系统安装还原

在日常的维护中,系统的备份和还原是大家经常需要操作的事情。虽然Windows 10已经提供很多的工具,如系统还原、WIM备份/还原,VHD备份等。不过这些工具大多是基于文件的备份/还原。我们以前经常的使用的Ghost则是基于扇区的备份/还原...

VirtualXposed 不支持32位应用 32位无法安装问题解决办法

VirtualXposed 不支持32位应用 32位无法安装问题解决办法

VirtualXposed 是基于VirtualApp 和 epic 在非ROOT环境下运行Xposed模块的实现(支持5.0~10.0)。与 Xposed 相比,目前 VirtualXposed 有...

php Aes 加密模式ECB填充pkcs5padding base64

最近做支付项目用到了aes加密不过试了好多办法总是和官方给出的结果不一样,找了很久终于找到了测试结果同 http://tool.chacuo.net/cryptaes/ <?php /**  * [Aes&nb...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。