Linux Shell 脚本实时监测 Nginx 状态/挂掉脚本会立即自动重启 Nginx

最近我购买了一台新的服务器,配置好环境后,发现Nginx经常意外停止运行。经过一番努力,我终于解决了这个问题。为了防止以后出现类似情况,我编写了一个shell脚本来监控 Nginx 的状态,如果它停止运行,脚本会自动重启 Nginx,以确保它一直处于运行状态。当然,如果你的 Nginx 频繁自动停止,那么你需要找出根本原因并解决它。

使用宝塔面板

如果你使用宝塔面板,那么非常简单。只需进入“计划任务”菜单,选择“shell 脚本”作为任务类型,选择执行周期为 15 分钟,然后将下面的代码填入“脚本内容”中:
这样,每隔 15 分钟脚本就会自动检测 Nginx 是否停止运行,如果停止了,它会自动启动 Nginx。请注意,你可以根据需要自行修改时间间隔。

#!/bin/bash
# author: 果优源码# website: https://www.gouu.net# 检查 nginx 的状态
curl -s http://127.0.0.1/nginx_status > /dev/null 2>&1

# 如果 nginx 没有运行
if [ $? -ne 0 ]
then
    echo "Nginx is not running. Restarting Nginx."
    /etc/init.d/nginx restart
else
    echo "Nginx is running."
fi

其他通用方法

如果你使用的是其他面板或程序,你可以尝试以下通用方法来解决问题。

创建脚本

将下面的代码保存为 dr_check_nginx.sh 文件,并上传到服务器的 root 目录下。然后执行命令 chmod+x/root/dr_check_nginx.sh,为该脚本文件赋予执行权限。

#!/bin/bash
# author: 果优源码
# website: https://www.gouu.net

# 检查 nginx 的状态
nginx_procnum=`ps -ef|grep "nginx"|grep -v grep|wc -l`
 
# 如果 nginx 没有运行
if [ $nginx_procnum -eq 0 ]
then
	echo "Nginx is not running. Restarting Nginx."
	/etc/init.d/nginx start
else 
	echo "Nginx is running."
fi

添加定时任务

使用 crontab -e 命令添加一个定时任务,将检查时间间隔设置为 15 分钟(根据需要自行修改):

#autorestartNginx
*/15****/bin/bash/root/dr_check_nginx.sh

检测并重启 NMP

该脚本可以检测 php、nginx、mysqld 和redis是否正在运行,并自动重启它们。你可以根据自己的服务器环境进行修改和删减。使用方法请参考上述第 2 节。

#!/bin/bash
# author: 果优源码
# website: https://www.gouu.net

# 检测 php,nginx,mysqld,redis 是否运行并自动重启
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 "Php-fpm is not running. Restarting Php-fpm."
	/etc/init.d/php-fpm-71 start
else 
	echo "Php-fpm is running."
fi
if [ $nginx_procnum -eq 0 ]
then
	echo "Nginx is not running. Restarting Nginx."
	/etc/init.d/nginx start
else 
	echo "Nginx is running."
fi
if [ $mysql_procnum -eq 0 ]
then
	echo "Mysql is not running. Restarting Mysql."
	/etc/init.d/mysql start
else 
	echo "Mysql is running."
fi
if [ $redis_procnum -eq 0 ]
then
	echo "Redis is not running. Restarting Redis."
	/etc/init.d/redis start
else 
	echo "Redis is running."
fi
 
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
快捷操作: 投诉反馈
果优源码 » Linux Shell 脚本实时监测 Nginx 状态/挂掉脚本会立即自动重启 Nginx

发表评论

您需要后才能发表评论

专注于服务中文站长,提供大量建站资源,让建站更简单

会员介绍 联系我们