监控服务器上的 Shell 脚本,核心目标是:及时发现脚本是否在执行、是否异常退出、是否卡死、输出是否正确。下面按“常见场景 + 常用方案”系统讲一下。
ps -ef | grep your_script.sh | grep -v grep
或更准确:
pgrep -f your_script.sh
✅ 适合:定时任务、常驻脚本
在脚本里统一输出日志:
#!/bin/bash
LOG=/var/log/my_script.log
echo "$(date) start" >> $LOG
# your code
echo "$(date) end" >> $LOG
监控关键字:
grep -i error /var/log/my_script.log
your_script.sh
echo $?
非 0 即异常,可配合定时任务报警。
* * * * * /path/your_script.sh >> /var/log/script.log 2>&1
查看邮件或日志判断是否执行。
#!/bin/bash
LOCK=/tmp/your_script.lock
[ -f $LOCK ] && exit 1
touch $LOCK
trap "rm -f $LOCK" EXIT
[program:shell_monitor]
command=/path/your_script.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/shell.err.log
stdout_logfile=/var/log/shell.out.log
✅ 自动重启
✅ 崩溃可感知
[Unit]
Description=My Shell Script
[Service]
ExecStart=/path/your_script.sh
Restart=always
[Install]
WantedBy=multi-user.target
systemctl enable my_script
systemctl status my_script
脚本定期写心跳:
echo $(date +%s) > /tmp/script_heartbeat
监控脚本:
NOW=$(date +%s)
LAST=$(cat /tmp/script_heartbeat)
[ $((NOW - LAST)) -gt 300 ] && echo "脚本可能卡死"
更适合:
| 指标 | 方法 |
|---|---|
| 是否运行 | ps / pgrep |
| 是否失败 | 退出码 |
| 是否卡死 | 心跳文件 |
| 是否重复 | 锁文件 |
| 是否异常 | 日志关键字 |
| 是否自动恢复 | supervisor / systemd |
✅ 常驻脚本
systemd / supervisor + 日志 + 心跳
✅ 定时脚本
cron + 锁文件 + 日志 + 退出码
✅ 关键业务
日志平台 + 告警
如果你愿意,可以告诉我:
我可以直接帮你写一套可落地的监控方案或脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。