monit 坚持让 运行 正常的程序超时
monit insists on timing out a program that's running fine
我在使用 monit 监视程序时遇到问题。
我 运行 在 raspberry pi 上,从源代码构建了 monit 5.11;我尝试使用存储库中的版本,但它是 5.4 并且不支持我想要的下面的一些语法。
我正在尝试关注 "Q: I have a program that does not create its own pid file. Since monit requires all programs to have a pid file, what do I do?" entry in the FAQ。
这是我的 start_sensors.sh 脚本(它只运行我的 python 程序,而不是
wiki 示例中的 java 程序):
#!/bin/bash
case 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 启动程序,它运行良好,然后由于 "timeout".
,monit 在三十秒后将其终止。
我的程序 运行 很好,并且产生了正确的输出
我要发送到 /tmp/post_temps.out 文件。
我不明白为什么 monit 会使程序超时...这应该是一个很长的 运行 过程!
我已经尝试更改 start_sensors.sh 脚本,以便它将程序置于后台(并让它编写自己的 /var/run/start_sensors.pid 文件),但随后 monit 启动了一个新实例每三十秒左右启动一次,不停止旧的,并覆盖 pid 文件。就好像连pid文件都没看一样。
谢谢!
以下作品:
#!/bin/bash
case 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
我在使用 monit 监视程序时遇到问题。
我 运行 在 raspberry pi 上,从源代码构建了 monit 5.11;我尝试使用存储库中的版本,但它是 5.4 并且不支持我想要的下面的一些语法。
我正在尝试关注 "Q: I have a program that does not create its own pid file. Since monit requires all programs to have a pid file, what do I do?" entry in the FAQ。
这是我的 start_sensors.sh 脚本(它只运行我的 python 程序,而不是 wiki 示例中的 java 程序):
#!/bin/bash
case 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 启动程序,它运行良好,然后由于 "timeout".
,monit 在三十秒后将其终止。我的程序 运行 很好,并且产生了正确的输出 我要发送到 /tmp/post_temps.out 文件。
我不明白为什么 monit 会使程序超时...这应该是一个很长的 运行 过程!
我已经尝试更改 start_sensors.sh 脚本,以便它将程序置于后台(并让它编写自己的 /var/run/start_sensors.pid 文件),但随后 monit 启动了一个新实例每三十秒左右启动一次,不停止旧的,并覆盖 pid 文件。就好像连pid文件都没看一样。
谢谢!
以下作品:
#!/bin/bash
case 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