我刚开始监视并且对 pid 文件有疑问:我已将以下内容添加到我的 /etc/monit/monitrc 中:
cat /etc/monit/monitrc
set daemon 30
set logfile /var/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state
set eventqueue
basedir /var/lib/monit/events # set the base directory where events will be stored
slots 100 # optionally limit the queue size
check ping.sh
with path "/path/to/ping.sh"
every "44 * * * *"
#if status != 0 then alert
我得到了以下内容/var/log/monit.log
:
[UTC Sep 21 22:44:09] error : Error reading pid from file '/path/to/ping.sh'
[UTC Sep 21 22:44:09] error : 'ping.sh' process is not running
[UTC Sep 21 22:44:09] info : 'ping.sh' trying to restart
尽管:
ls -l /path/to/ping.sh
-rwxrwxr-x 1 root root 1045 Sep 21 20:08 /path/to/ping.sh
在脚本内部,pid 存储在 /var/run/ping.pid 中:
#!/bin/bash
pidfile="/var/run/ping.pid"
# Get the pid of the currently running script
ps ax | grep $0 | grep $SHELL | awk '{print $1}'>$pidfile
pid 文件在脚本底部被删除:
rm $pid文件
为什么会出现错误:Error reading pid from file '/path/to/ping.sh'
?
只是为了透明:我也在 [email protected] 邮件列表上发布了同样的问题,但它似乎不是很活跃。我将同步两个线程之间的任何回复!
正确的语法是“检查程序”(https://mmoni.com/monit/documentation/monit.html#Program)
此外,不建议在 CRON 表达式中为分钟字段指定唯一值。在您的情况下,最好每 120 个周期触发一次检查(1 小时 -> 60 分钟 -> 每 30 秒 1 个周期 -> 每 120 个周期)
它总结为: