宝塔面板PHPNginxMysql-RedisMem监测并自动重启脚本

2024.12.17更新增加一个综合服务器环境监测自动重启版。网站时不时会报错,或者Nginx或者PHP的,因此老白博客@老白我找了一些代码,用于宝塔面板PHP-Nginx-Mysql检测并自动重启Shell脚本代码分享,包括memcached和Redis(我虽然是WordPress,但理论上宝塔通用)。

宝塔面板PHP-Nginx-Mysql-redis-mem检测并自动重启

1.shell代码添加方法

宝塔面板——计划任务——Shell脚本,时间自行设定

宝塔面板PHP-Nginx-Mysql-redis-mem检测并自动重启

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,当然在计划任务界面也可以看到

所有服务重启代码老白博客均已测试,下图是我停止所有服务后运行的结果

宝塔面板PHP-Nginx-Mysql-redis-mem检测并自动重启

下面是单独的代码,如果你并不需要全部监测的话

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

更多宝塔面板实用教程见文末标签。