Monit “check program” and restart based on exit code

Можно генерировать CSR где угодно. Сгенерированный сертификат должен будет быть в формате, который может использовать устройство с помощью него. Как правило, это будет PEM.

2
задан 6 February 2016 в 19:20
1 ответ

(извините за длинный ответ заранее ^^)

Получение Вещей Право

, Но когда я использую check program, Monit автоматически не запустит его. Если программа будет работать, и по некоторым причинам она останавливается с кодом выхода кроме 0, то monit не перезапустит ее (см. мою конфигурацию ниже).

существует значительная разница между process и program в Monit:

процесс А является двоичным файлом, работающим в фоновом режиме - демон (как HTTPD, сервер БД, и т.д.). Процесс не выполняется Monit. Monit действительно не управляет теми приложениями. Это может, однако, взаимодействовать с демоном-izer. Пример: systemctl start nginx не выполнит nginx на переднем плане (и заблокирует Ваш удар), но запустит демона в фоне (который продолжает бежать даже после уничтожения сессии).

программа А является двоичным файлом, которым, выполняемым и управляет Monit. Эта программа должна выйти через какое-то время, и Monit воздействует, как все, что шло. Пример: du -hd1 выполнит, создаст вывод и выход. Вы можете затем, на основе кода состояния, содержание, и т.д., реагирует на результат/вывод выполнения.

<час>

Примечания по Конфигурации

Вы пытаетесь использовать check program для daemonize Ваше приложение. Тот будет afaik не работать. Я думаю, что необходимо пойти для [1 112] в этом случае. Вам нужно к [1 129] демон ize Ваш сценарий для этого. Возвращение к этому позже...

    if status > 200 then restart
    if status < 201 then stop

Monit там, чтобы взаимодействовать, если что-то необычное происходит. Эта конфигурация говорит Monit:

  • существует что-то необычный случай если status > 200
  • существует что-то необычный случай, если status < 201

Это приводит к факту, что нет состояние успеха , где все хорошо. Вы сохраните себя в аварийном цикле ;)

    if 2 restart 5 cycles then exec “/monit/custom_script.sh”
    if 2 restart 5 cycles then stop

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

<час>

Результат - Вид [1 130]

Лучший способ решить это состоял бы в том, чтобы иметь pidfile из Вашего сценария Python. Так как я не знаю s*it о Python, это ваше дело ;-)

А супергрязный способ создать себя, pidfile был бы сценарием (/monit/MyProgram-daemonize) удара:

#!/usr/bin/env bash
(
    /monit/MyProgram.py &
    echo -n "$!" > "/tmp/MyProgram.pid"
) &

И другой (/monit/MyProgram-kill):

#!/usr/bin/env bash

if [[ -f /tmp/MyProgram.pid ]]; then
    kill -SIGTERM $(cat /tmp/MyProgram.pid)
    wait $(cat /tmp/MyProgram.pid)
    rm -f /tmp/MyProgram.pid
    exit 0
fi

exit 1

Комментарии:

  • я использовал /tmp/ вместо [1 118] по причинам разрешения
  • , я использовал kill -SIGTERM, потому что kill -SIGKILL или kill -9 являются злыми ;) Вам, возможно, придется скорректировать это...

можно использовать check process затем:

check process MyProgram pidfile "/tmp/MyProgram.pid"
  start program = "/monit/MyProgram-daemonize" as uid myNonRootUserHere
  stop program = "/monit/MyProgram-kill" as uid MyNonRootUserHere

  if failed then restart
  if 3 restarts within 5 cycles then unmonitor

самый большой дефект с этим подходом был бы возможным повторным использованием pids. Monit не имеет никакого соединения между изодромным с предварением файлом и двоичным файлом. Таким образом, если Ваш Python запустится с pid 100 и будет уничтожен во всяком случае, но другой процесс берет pid 100, то Ваш Monit не заметит его и думает, что все прекрасно. Для этого необходимо добавить проверку (примеры наверняка; если Ваша программа не обеспечивает HTTPD, та проверка не могла бы быть следующей лучшей вещью):

  if failed uid MyNonRootUserHere then restart

  if failed
    host 127.0.0.1
    port 80
    protocol http
    request "/"
  then alert
0
ответ дан 3 December 2019 в 14:31

Теги

Похожие вопросы