利用Shell 脚本实时检测Linux Nginx运行状态 异常自动重启

2024-10-24 0 1,406

正文:

以前汇站编写了一个监控 MySQL 服务状态的脚本,它能够自动重启数据库服务,以应对数据库意外停止的紧急情况。现在,随着技术的发展,汇站又遇到了新的挑战——新购置的服务器上,Nginx服务有时会异常停止。经过一番努力,汇站成功解决了这个问题,并决定分享一个监控 Nginx 状态的shell脚本,以自动重启服务,确保 Nginx 始终在线。当然,如果 Nginx 频繁自动重启,那么就需要深入调查并解决根本问题。
利用Shell 脚本实时检测Linux Nginx运行状态 异常自动重启

1.宝塔面板:

使用宝塔面板的用户可以轻松实现监控。只需进入“计划任务”菜单,选择“shell 脚本”作为任务类型,并将执行周期设置为每 15 分钟一次。然后,在“脚本内容”中填入以下代码:


#汇站网
#https://www.huizhanii.com/38811.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 是否运行,如果发现服务已停止,就会自动启动。请注意,您可以根据需要调整时间间隔。

2.其他通用

对于使用其他面板或程序的用户,可以尝试以下通用方法:

2.1 编写脚本
首先,将以下代码保存为名为`dr_check_nginx.sh`的文件,并上传至服务器的根目录。然后,通过执行命令`chmod +x /root/dr_check_nginx.sh`来赋予该脚本执行权限。


#汇站网
#https://www.huizhanii.com/38811.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 分钟一次。


#汇站网
#https://www.huizhanii.com/38811.html
#auto restart Nginx
*/15 * * * * /bin/bash /root/dr_check_nginx.sh

3. 监控并重启 NMP 服务

如果您希望同时监控并重启 php、nginx、mysqld 和redis服务,可以使用以下脚本。您可以根据服务器环境自行修改或删除部分内容。使用方法请参考第 2 节中的说明。


#汇站网
#https://www.huizhanii.com/38811.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

本文章已结束,如转载请注明:汇站网 » 利用 Shell 脚本实时检测 Linux Nginx 运行状态 异常自动重启

收藏 (0)

微信支付 微信扫一扫

支付宝支付 支付宝扫一扫

打赏二维码
点赞 (0)

站长资源下载中心-找源码上汇站

常见问题
  • 如果付款后没有弹出下载页面,多刷新几下,有问题联系客服!
查看详情
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情

相关文章

联系官方客服

为您解决烦忧 - 24小时在线 专业服务