前言:
最近我购买了一台新的服务器,配置好环境后,发现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
转载请注明:汇站网 » Linux Shell 脚本实时监测 Nginx 状态/挂掉脚本会立即自动重启 Nginx