您的位置 首页 宝塔面板

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

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

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

#!/bin/bash
# author: 汇站网# website: https://www.huizhanii.com/34397.html# 检查 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

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

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

#!/bin/bash
# author: 汇站网
# website: https://www.huizhanii.com/34397.html

# 检查 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

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

#autorestartNginx
*/15****/bin/bash/root/dr_check_nginx.sh
全选代码复制
3. 检测并重启 NMP
该脚本可以检测 php、nginx、mysqld 和redis是否正在运行,并自动重启它们。你可以根据自己的服务器环境进行修改和删减。使用方法请参考上述第 2 节。

#!/bin/bash
# author: 汇站网
# website: https://www.huizhanii.com/34397.html

# 检测 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

1.本文来自网络,不代表优比客立场,转载请注明出处:https://siwabbs.com/baotamianban/221.html

2.未经原版权作者许可,禁止用于任何商业环境,任何人不得擅作它用,不得用于违反国家法律,否则发生的一切法律后果自行承担!

联系我们

联系我们

微信9953517

在线咨询: QQ交谈

邮箱: njknjknjk@126.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部