很久前龙笑天写了一个检测 Mysql 状态并自动重启的脚本,详见下文,以解决数据库意外停止运行的情况。
最近入手了个新服务器,配置好环境后,居然诡异的会出现 Nginx 意外停止运行。龙笑天经过几经折腾,终于解决了。另外,为了防止后续有这种情况,在此提供一个 shell 脚本,监控 Nginx 状态,未运行,就自动重启,以保证 Nginx 处于运行状态。当然,如果你的nginx频繁自动停止,那么你就要查找出根本原因,并解决下为好~
1.宝塔面板
使用宝塔面板的话,就很简单了,前往“计划任务”菜单,“任务类型”选“shell 脚本”,“执行周期”选“N 分钟”,然后填 15 分钟,“脚本内容”内容填下面的代码:
#!/bin/bash
# author: 龙笑天
# website: https://www.ilxtx.com/linux-shell-auto-restart-nginx.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
这样就可以每隔 15 分钟自动检测 Nginx 是否停止,停止的话就会自动启动了。PS:时间间隔 15 自行修改。
2.其他通用
如果你使用的其他面板或程序的话,则可以试试使用下面的通用方法来解决。
2.1 制作脚本
将下面代码保存文件名为dr_check_nginx.sh
,然后上传至服务器的root
目录下,然后执行命令chmod +x /root/dr_check_nginx.sh
赋予该脚本文件执行权限:
#!/bin/bash
# author: 龙笑天
# website: https://www.ilxtx.com/linux-shell-auto-restart-nginx.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 分钟自行修改:
#auto restart Nginx
*/15 * * * * /bin/bash /root/dr_check_nginx.sh
3 NMP 全部检测并重启
检测 php,nginx,mysqld,redis 全部是否运行并自动重启。脚本如下,可自行修改删减以适配你的服务器环境,食用方法,参考上面的第 2 节。
#!/bin/bash
# author: 龙笑天
# website: https://www.ilxtx.com/linux-shell-auto-restart-nginx.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
相关参考
宝塔面板:自动检查 nginx 状态,未运行就重启-pc6a 学习分享
判断 nginx 服务是否启动,未启动自动重启 shell 脚本-CSDN 博客
还没有人赞赏,快来当第一个赞赏的人吧!
声明:本文为原创文章,版权归龙笑天下所有,欢迎分享本文,转载请保留出处!