Linux Shell 脚本实时检测 Nginx 状态 挂掉则立即自动重启

2023-12-05 16:19 103 2 条评论 龙笑天下

Linux Shell 脚本实时检测 Nginx 状态 挂掉则立即自动重启

很久前龙笑天写了一个检测 Mysql 状态并自动重启的脚本,详见下文,以解决数据库意外停止运行的情况。

Linux Shell 脚本实时检测 MySQL 状态 挂掉则立即自动重启-BG
Linux Shell 脚本实时检测 MySQL 状态 挂掉则立即自动重启

Linux Shell 脚本实时检测 MySQL 状态 挂掉则立即自动重启

为什么会出现数据库连接错误 相信很多朋友都遇到过 WordPress 提示“建立数据库连接时出错”(英文:“Error establishing a database connection”)这...

最近入手了个新服务器,配置好环境后,居然诡异的会出现 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 博客

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

2023-10-24

2014-03-23

发表评论

表情 格式 贴图 链接 私密 签到
评论
正在努力加载中...
扫一扫二维码分享
×
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. Learn more