本文目录导读:

#!/bin/bash
# ============================================================
# 定时检查并重启崩溃服务脚本
# 功能:监控指定系统服务,当服务停止时自动重启并记录日志
# 使用:根据需求修改 SERVICE_NAME 和 INTERVAL 变量
# ============================================================
# ---------- 配置区域(请根据实际需求修改) ----------
SERVICE_NAME="your-service-name" # 要监控的服务名称(如 nginx, mysql 等)
INTERVAL=60 # 检查间隔时间(秒),建议至少 30 秒
LOG_FILE="/var/log/service_monitor.log" # 日志文件路径(确保脚本有写入权限)
# ---------------------------------------------------------
# 检查是否以 root 权限运行(因为 systemctl restart 常需 root)
if [[ $EUID -ne 0 ]]; then
echo "错误:本脚本需要 root 权限才能重启服务,请使用 sudo 运行。"
exit 1
fi
# 创建日志函数(带时间戳)
log_message() {
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] $1" | tee -a "$LOG_FILE"
}
# 检查所需命令是否存在
for cmd in systemctl grep tee; do
if ! command -v $cmd &> /dev/null; then
echo "错误:命令 '$cmd' 未找到,请先安装。"
exit 1
fi
done
# 检查服务是否存在
if ! systemctl list-units --type=service --all | grep -q "$SERVICE_NAME.service"; then
log_message "错误:服务 '$SERVICE_NAME' 不存在,请检查服务名称。"
exit 1
fi
log_message "服务监控脚本启动"
log_message "监控服务: $SERVICE_NAME, 检查间隔: ${INTERVAL}秒"
log_message "日志文件: $LOG_FILE"
echo "----------------------------------------"
# 主循环
while true; do
# 获取服务状态(排除 grep 自身)
if systemctl is-active --quiet "$SERVICE_NAME"; then
# 服务正常运行,不记录日志以免日志膨胀
# 如需调试可以取消下面注释
# log_message "服务 '$SERVICE_NAME' 运行正常"
:
else
# 服务未运行,尝试重启
log_message "警告:服务 '$SERVICE_NAME' 已停止!尝试重启..."
# 执行重启操作
if systemctl restart "$SERVICE_NAME" 2>&1; then
log_message "成功:服务 '$SERVICE_NAME' 已重启"
# 可选:等待几秒后再次检查重启是否生效
sleep 3
if systemctl is-active --quiet "$SERVICE_NAME"; then
log_message "确认:服务 '$SERVICE_NAME' 重启后正常运行"
else
log_message "严重:服务 '$SERVICE_NAME' 重启后仍未运行,请手动检查!"
fi
else
log_message "失败:无法重启服务 '$SERVICE_NAME',请手动检查错误"
fi
fi
# 等待指定间隔后再次检查
sleep "$INTERVAL"
done
使用说明
-
配置脚本
- 将
SERVICE_NAME改为您要监控的服务名称(如nginx、mysql、sshd等) - 调整
INTERVAL检查间隔(单位:秒) - 修改
LOG_FILE日志路径(确保目录存在且有写入权限)
- 将
-
授予执行权限
chmod +x service_monitor.sh
-
运行脚本(需要 root 权限)
sudo ./service_monitor.sh
-
后台运行(推荐)
sudo nohup ./service_monitor.sh &
或使用
screen/tmux保持会话。
作为系统服务运行(更稳健)
-
将脚本移动到
/usr/local/bin/:sudo cp service_monitor.sh /usr/local/bin/
-
创建 systemd 服务文件
/etc/systemd/system/service-monitor.service:[Unit] Description=Service Monitor - Auto restart crashed services After=network.target [Service] Type=simple ExecStart=/usr/local/bin/service_monitor.sh Restart=always RestartSec=30 User=root [Install] WantedBy=multi-user.target
-
启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable service-monitor.service sudo systemctl start service-monitor.service
注意事项
- 日志管理:长时间运行会导致日志文件增大,建议配置 logrotate 进行日志轮转。
- 服务依赖:重启服务时,请确保其依赖的其他服务正常运行。
- 重启策略:如果服务频繁崩溃,脚本会不断尝试重启,可能造成系统资源消耗,建议同时排查服务崩溃的根本原因。
- 非 systemd 系统:如果您的系统不使用 systemd(如旧版 SysV init),请将脚本中的
systemctl替换为对应的管理命令(如service)。
自定义扩展
您可以按需在脚本中添加:
- 邮件/钉钉/企业微信通知(崩溃时)
- 最大重启次数限制(防止无限重启)
- 检查特定进程而非 systemd 服务
- 健康检查(如 HTTP 端口检测)
如果需要其他自定义功能,欢迎提出!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播