Как объединить проверку процесса и файла в Monit?

Резюме

Как я могу объединить несколько проверок в Monit? Я хочу проверить активность процесса и содержимое файла / метку времени.


Длинное и скучное объяснение

Я работаю над демоном Monit, который поддерживает работу моего сервера Bukkit Minecraft. Выполняет несколько проверок. На данный момент у меня есть этот код:

#!monit

check process bukkit pidfile /var/run/bukkit.pid # check if the java process is running
    start program = "/sbin/start bukkit"         # start with Upstart
    stop program  = "/sbin/stop bukkit"          # stop with Upstart

    if failed                                    # send a noop request to check if the server responses
        host cubixcraft.de port 20059 protocol http
        and request "/api/call?method=runConsoleCommand&args=%5B%22noop%22%5D&key=d9c7f3f6be0c92c1b2725f0e5a3352514cee0885c3bf7e0189a76bbaf2f4d7a7"
            with checksum e006695c8da58e03f17a305afd1a1a32
            timeout 20 seconds for 2 cycles
    then restart                                 # restart if it fails

Он работает ... но медленно. Мне нужно подождать 20 секунд, пока сервер не отключится, если что-то пойдет не так. Но мне нужен этот тайм-аут, потому что сервер время от времени выполняет некоторые перезагрузки (для обновления конфигурации, очистки памяти и т. Д.), Которые вызывают небольшие задержки. Без тайм-аута 20 секунд на 2 цикла сервер будет немедленно остановлен, если он перезагрузится.

Хорошо, для меня не проблема подождать 20 секунд, пока сервер перезапустится, если что-то действительно пошло не так. Но в большинстве случаев (когда что-то идет не так) все механизмы безопасности на сервере перестают работать.

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

У меня есть такой подход: сервер что-то записывает в файл журнала, когда выполняется какая-либо команда (включая перезагрузки и вызовы API, которые я использую для проверки статуса сервера). Таким образом, отметка времени файла журнала - это отметка времени последней команды. Во время перезагрузки в файл ничего не записывается.Таким образом, я могу обнаружить перезагрузку с помощью простой проверки метки времени, и только если сервер в настоящее время перезагружается, я даю ему 20 секунд.

6
задан Francesco Menzani 8 August 2015 в 16:51
поделиться