2015-01-24 6 views
2

У меня проблема с мониторингом программы с использованием monit.monit настаивает на выделении программы, которая работает нормально

Я запускаю это на малиновом пие, построив 5.11 из источника; Я попытался использовать версию из репозиториев, но она была 5.4 и не поддерживала какой-либо синтаксис ниже, который я хочу.

Я пытаюсь выполнить «Q: У меня есть программа, которая не создает свой собственный файл pid. Поскольку monit требует, чтобы все программы имели pid-файл, что мне делать?» entry in the FAQ.

Вот мой start_sensors.sh сценарий (который просто запускает свою программу питона, вместо программы 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" 

вывод в журнале мониторинга, выглядит следующим образом:

[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 убивает ее через тридцать секунд из-за «таймаута».

Моя программа работает нормально и производит правильный вывод , который я отправляю в файл /tmp/post_temps.out.

Я не понимаю, почему monit выбрал программу изначально ... это должен быть длительный процесс!

Я попытался изменить сценарий start_sensors.sh, чтобы он помещал программу в фоновом режиме (и он записывал свой собственный файл /var/run/start_sensors.pid), но затем monit запускает новый экземпляр каждый тридцать секунд или около того, не останавливая старые, и записывая файл pid. Это похоже на то, что он даже не смотрит файл pid.

СПАСИБО!

+0

ли вы решить эту проблему? – valentt

ответ

5

следующие работы:

#!/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 
+1

Для других, кто хочет знать, почему это работает: я считаю, что это работает, потому что скрипт python никогда не выходил (это был не демон), поэтому вы использовали '&' в конце команды start для запуска нового фонового процесса и сохранил этот новый PID процесса вместо PID скрипта (см. http://stackoverflow.com/a/5163260/2544629 для списка команд bash) – manroe

+0

Вы только что спасли мою жизнь :) –