步骤1:编写Shell脚本
创建一个脚本文件(如rsync_watchdog.sh),内容如下:
#!/bin/bash
# 设置PATH环境变量,确保rsync可访问
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 匹配特定的rsync进程(根据你的命令调整正则表达式)
RSYNC_PATTERN="rsync.*--partial.*/backup root@erpsit:/data"
# 日志文件路径
LOG="/data/rsync_watchdog.log"
# 检查是否有匹配的rsync进程
if ! pgrep -f "$RSYNC_PATTERN" > /dev/null; then
echo "$(date +'%Y-%m-%d %H:%M:%S') - Rsync进程不存在,正在启动..." >> "$LOG"
# 替换为你的实际rsync命令,并后台运行
rsync -avz --partial --progress /backup root@erpsit:/data >> "$LOG" 2>&1 &
echo "$(date +'%Y-%m-%d %H:%M:%S') - Rsync已启动,PID: $!" >> "$LOG"
fi
关键点说明:
正则表达式匹配:RSYNC_PATTERN中的rsync.*--partial.*/backup root@erpsit:/data会匹配包含--partial选项以及源/目标路径的进程。根据你的实际命令调整正则表达式。
日志记录:所有操作(如进程检测、重启)会记录到/data/rsync_watchdog.log,便于后续排查。
后台运行:&让rsync在后台执行,避免阻塞脚本。
步骤2:赋予脚本执行权限
chmod +x /data/rsync_watchdog.sh
步骤3:配置Cron定时任务
通过crontab -e添加定时任务,每分钟检查一次:
* * * * * /data/rsync_watchdog.sh
步骤4:验证与调试
手动测试脚本:
sh /data/rsync_watchdog.sh
查看日志是否正常:
tail -f /data/rsync_watchdog.log
检查进程:
pgrep -af "rsync.*--partial"
模拟进程崩溃:
手动终止rsync进程,观察脚本是否能自动重启。
注意事项
确保免密登录:如果rsync走SSH协议,必须配置SSH密钥认证,避免脚本因密码输入挂起。
路径问题:在cron中尽量使用绝对路径,避免因环境变量问题导致命令找不到。
日志管理:长期运行需配置日志轮替(如logrotate),防止日志文件过大。
进程误杀:正则表达式需足够精确,避免匹配到其他无关的rsync进程。
扩展:处理异常挂起(可选)
如果rsync进程可能假死(无响应但进程存在),可添加超时机制:
# 检查进程是否存在且运行时间(示例逻辑)
PID=$(pgrep -f "$RSYNC_PATTERN")
if [ -n "$PID" ]; then
# 获取进程运行时间(秒)
RUNTIME=$(ps -p "$PID" -o etime= | awk '{print $1}')
if [ "$RUNTIME" -gt 3600 ]; then # 超过1小时视为异常
kill "$PID"
echo "$(date) - 进程已运行超时,强制重启" >> "$LOG"
fi
fi
通过上述步骤,你的rsync进程将在中断后自动重启,确保传输任务持续进行。
编写一个守护脚本并结合cron定时任务来监控和重启rsync进程
未经允许不得转载:徐万新之路 » 编写一个守护脚本并结合cron定时任务来监控和重启rsync进程