实践:
脚本:
使用方法:宝塔面板添加计划任务,设置1分钟/5分钟/10分钟执行一次
脚本特点:可以检测MySQL,Redis,PHP,Nginx等常用业务的运行状态,停止后可自动启动
脚本目前缺点:
无法判定MySQL正确的运行状态,如果网站程序因此脚本出现数据库异常,建议注释MySQL相关片段(已经使用宝塔自带的检测程序
#!/bin/bash
# 函数:检查服务状态并尝试启动
check_service() {
local service=$1
local start_cmd=$2
local status_cmd=$3
local status_line
# 检测服务状态
status_line=$($status_cmd)
if echo "$status_line" | grep -q "not running"; then
echo "$service服务未运行,正在尝试启动..."
$start_cmd
# 再次检测服务状态
status_line=$($status_cmd)
if echo "$status_line" | grep -Eq "is running|already running.|SUCCESS!"; then
echo "$service服务已成功启动。"
else
echo "$service服务启动失败。"
fi
elif echo "$status_line" | grep -Eq "is running|already running."; then
echo "$service服务正在运行。"
else
echo "$service服务未运行,正在尝试启动..."
$start_cmd
# 再次检测服务状态
status_line=$($status_cmd)
if echo "$status_line" | grep -Eq "is running|already running."; then
echo "$service服务已成功启动。"
else
echo "$service服务启动失败。"
fi
fi
}
# 检测并启动PHP服务
check_service "PHP" "/etc/init.d/php-fpm-72 start" "/etc/init.d/php-fpm-72 status"
# 检测并启动Nginx服务
check_service "Nginx" "/etc/init.d/nginx start" "/etc/init.d/nginx status"
# 检测并启动MySQL服务
#check_service "MySQL" "/etc/init.d/mysqld start" "/etc/init.d/mysqld status"
btpython /www/server/panel/script/restart_database.py
# 检测并启动Redis服务
check_service "Redis" "/etc/init.d/redis start" "/etc/init.d/redis status"
如果需要添加其他进程守护检测,可在原脚本下添加新代码:
check_service "服务名称" "/etc/init.d/程序名 启动命令" "程序名 运行状态"
例如:
check_service "Redis" "/etc/init.d/redis start" "/etc/init.d/redis status"
没有回复内容