正文:
以前汇站编写了一个监控 MySQL 服务状态的脚本,它能够自动重启数据库服务,以应对数据库意外停止的紧急情况。现在,随着技术的发展,汇站又遇到了新的挑战——新购置的服务器上,Nginx服务有时会异常停止。经过一番努力,汇站成功解决了这个问题,并决定分享一个监控 Nginx 状态的shell脚本,以自动重启服务,确保 Nginx 始终在线。当然,如果 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 运行状态 异常自动重启