Используйте Monit для мониторинга программы Python

Я использую Monit для мониторинга системы. У меня есть файл python, который я также хочу отслеживать, я понимаю, что мне нужно создать скрипт-оболочку, поскольку python не генерирует файлы pid. Я следовал инструкциям на этом сайте, однако мне не удалось заставить скрипт Начало. Я никогда раньше не создавал сценарий-оболочку, поэтому думаю, что в моем сценарии есть ошибка. В журнале monit написано "Не удалось запустить"

Правило мониторинга

check process scraper with pidfile /var/run/scraper.pid
   start = "/bin/scraper start"
   stop = "/bin/scraper stop"

скрипт-оболочка

#!/bin/bash

PIDFILE=/var/run/scraper.pid

case $1 in
   start)
      echo $$ > ${PIDFILE};
      source /home
      exec python /home/scraper.py 2>/dev/null
   ;;
   stop)
      kill `cat ${PIDFILE}` ;;
   *)
      echo "usage: scraper {start|stop}" ;;
esac
exit 0

person Jim    schedule 04.05.2014    source источник


Ответы (2)


Использование exec заменит оболочку программой exec, это не то, что вы хотите здесь получить, вы хотите, чтобы ваш скрипт-оболочка запускал программу и отсоединял ее перед возвратом, записывая ее PID в файл, чтобы его можно было остановить позже .

Вот исправленная версия:

#!/bin/bash

PIDFILE=/var/run/scraper.pid

case $1 in
   start)
       source /home
       # Launch your program as a detached process
       python /home/scraper.py 2>/dev/null &
       # Get its PID and store it
       echo $! > ${PIDFILE} 
   ;;
   stop)
      kill `cat ${PIDFILE}`
      # Now that it's killed, don't forget to remove the PID file
      rm ${PIDFILE}
   ;;
   *)
      echo "usage: scraper {start|stop}" ;;
esac
exit 0
person Jean-Karim Bockstael    schedule 06.08.2014
comment
Я действительно не понимаю, почему используется источник, поскольку ссылка в вопросе теперь ведет к 404. Можно ли это прокомментировать? Кроме того, как называются эти два файла и где они находятся? Спасибо :) - person Aaron; 24.07.2015

Вы также можете полностью обойти всю эту оболочку, добавив небольшую функцию, которая записывает pid-файл внутри вашего скрипта. Что-то вроде:

import os

def writePidFile():
    pid = str(os.getpid())
    currentFile = open(‘/var/run/myPIDFile.pid’, ‘w’)
    currentFile.write(pid)
    currentFile.close()

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

person Markov Chained    schedule 08.03.2017
comment
Как вы справляетесь с действиями запуска/остановки? - person EnemyBagJones; 11.12.2017
comment
Следуйте инструкциям с обучающего веб-сайта. Файл PID — это не что иное, как идентификатор процесса, поэтому программа/скрипт может быть запущена/остановлена. Вам все еще нужно определить их в соответствии с инструкциями здесь: digitalocean.com/community/tutorials/ - person Markov Chained; 13.12.2017