宝塔面板PHPNginxMysql-RedisMem监测并自动重启脚本
2024.12.17更新增加一个综合服务器环境监测自动重启版。网站时不时会报错,或者Nginx或者PHP的,因此老白博客@老白我找了一些代码,用于宝塔面板PHP-Nginx-Mysql检测并自动重启Shell脚本代码分享,包括memcached和Redis(我虽然是WordPress,但理论上宝塔通用)。
1.shell代码添加方法
宝塔面板——计划任务——Shell脚本,时间自行设定
2.综合环境检测重启版
2.1 脚本代码
宝塔面板相关
脚本代码如下:
#!/bin/bash
# 监控并自动重启 Nginx、PHP-fpm、MySQL、Redis 和 Memcachedhttps://www.xcbtmw.com/18654.html
# 日志文件路径
LOG_FILE="/www/xcbtmw_services_jiankong.log"
# 监测并重启,注意php版本号
restart_service() {
local service=$1
local init_script=$2
pgrep -x $service &> /dev/null
if [ $? -ne 0 ]; then
if [ -f $init_script ]; then
$init_script start
echo "监控到$service已停止,已执行重启计划,时间: $(date '+%Y-%m-%d %H:%M:%S')" >> $LOG_FILE
else
echo "错误:尝试启动$service失败,因为启动脚本$init_script不存在。" >> $LOG_FILE
fi
fi
}
# 检查并重启 Nginx
restart_service "nginx" "/etc/init.d/nginx"
# 检查并重启 PHP(注意版本号)
restart_service "php-fpm" "/etc/init.d/php-fpm-81"
# 检查并重启 MySQL
restart_service "mysqld" "/etc/init.d/mysqld"
# 特殊处理 MySQL 需要执行的额外脚本
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]; then
bash /www/server/panel/script/rememory.sh
fi
# 检查并重启 Redis
restart_service "redis" "/etc/init.d/redis"
# 检查并重启 Memcached
restart_service "memcached" "/etc/init.d/memcached"
2.2 功能说明
基本都写全了,如果你没有安装某个服务,也会直接提示,不影响代码运行
- Nginx: 监控并尝试重启 Nginx 服务。
- PHP-fpm: 监控并尝试重启特定版本(例如 8.1)的 PHP-fpm 服务。
- MySQL: 监控并尝试重启 MySQL 服务。
- Redis: 监控并尝试重启 Redis 服务。
- Memcached: 监控并尝试重启 Memcached 服务。
2.3 日志文件
路径为:/www/xcbtmw_services_jiankong.log
,当然在计划任务界面也可以看到
所有服务重启代码老白博客均已测试,下图是我停止所有服务后运行的结果
下面是单独的代码,如果你并不需要全部监测的话
3.Nginx自动重启脚本
检测并自动重启
pgrep -x nginx &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/nginx start
echo "监控到Nginx已停止,已执行重启计划,时间: `date "+%Y-%m-%d %H:%M:%S"` " >> /www/Nginx_jiankong.log
fi
自动重启
/etc/init.d/nginx restart
4.PHP自动重启脚本
检测并自动重启
#!/bin/bash
# Linux监控PHP服务,关闭就自动重启
pgrep -x php-fpm &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/php-fpm-56 restart
echo "监控到php56已停止,已执行重启计划,时间: `date "+%Y-%m-%d %H:%M:%S"` " >> /www/php_jiankong.log
fi
说明
根据安装PHP版本号做更改,示例给的是PHP56
5.Mysql自动重启脚本
检测并自动重启
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ];then
bash /www/server/panel/script/rememory.sh
/etc/init.d/mysqld start
echo "监控到MySQL已停止,已执行重启计划,时间: `date "+%Y-%m-%d %H:%M:%S"` " >> /www/mysql_jiankong.log
fi
6.Redis和memcached
/etc/init.d/memcached restart
/etc/init.d/redis restart
Redis检测并自动重启
ps=`ps -efl|grep redis|grep -v $0|grep -v grep|wc -l`
if [ $ps -eq 0 ];
then
echo -e "n$(date '+%Y-%m-%d %H:%M:%S') start "
/etc/init.d/redis start
echo "$(date '+%Y-%m-%d %H:%M:%S') done"
else
echo $(date +%F%n%T) "redis正在运行..."
exit 0;
fi
7.重启服务器(Linux)
reboot
更多宝塔面板实用教程见文末标签。
谢谢分享