我在使用monit监控程序时遇到问题。
我在树莓派上运行它,从源代码构建了monit 5.11;我尝试使用存储库中的版本,但它是5.4并且不支持我想要的一些语法。
我正在尝试遵循“问:我有一个程序没有创建自己的pid文件。由于monit要求所有程序都有一个pid文件,我该怎么办?” entry in the FAQ
这是我的start_sensors.sh脚本(它只运行我的python程序,而不是 wiki示例中的java程序:
#!/bin/bash
case $1 in
start)
echo $$ > /var/run/start_sensors.pid;
exec 2>&1 /usr/bin/python /home/pi/temperature/post_temps.py 1>/tmp/post_temps.out
;;
stop)
kill `cat /var/run/start_sensors.pid` ;;
*)
echo "usage: start_sensors {start|stop}" ;;
esac
exit 0
这是我的/etc/monit/monitrc
条目:
# Run temperature sensor monitor
check process start_sensors.sh with pidfile /var/run/start_sensors.pid
start = "/home/pi/temperature/start_sensors.sh start"
stop = "/home/pi/temperature/start_sensors.sh stop"
monit日志中的输出如下所示:
[EST Jan 24 14:21:16] info : 'raspberrypi' Monit reloaded
[EST Jan 24 14:21:16] error : 'start_sensors.sh' process is not running
[EST Jan 24 14:21:16] info : 'start_sensors.sh' trying to restart
[EST Jan 24 14:21:16] info : 'start_sensors.sh' start: /home/pi/temperature/start_sensors. sh
[EST Jan 24 14:21:46] error : 'start_sensors.sh' failed to start (exit status -1) -- Program /home/pi/temperature/start_sensors.sh timed out
所以你可以看到,monit启动程序,运行正常,然后monit因为“超时”而在30秒后杀死它。
我的程序运行正常,并产生正确的输出 我正在发送到/tmp/post_temps.out文件。
我不明白为什么monit会把程序计时出来......这应该是一个长期运行的过程!
我已经尝试更改start_sensors.sh脚本,以便将程序放在后台(并让它编写自己的/var/run/start_sensors.pid文件),然后monit每隔三十启动一个新实例几秒钟左右,不停止旧的,并写入pid文件。就像它甚至没有看到pid文件一样。
谢谢!
答案 0 :(得分:7)
以下作品:
#!/bin/bash
case $1 in
start)
/usr/bin/python /home/pi/temperature/post_temps.py 1>/tmp/post_temps.out &
echo $! > /var/run/start_sensors.pid ;
;;
stop)
kill `cat /var/run/start_sensors.pid` ;;
*)
echo "usage: start_sensors {start|stop}" ;;
esac
exit 0