Сводка
Как объединить несколько проверок в 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 секунд, пока сервер не прекратит работу, если что-то пойдет не так.Но мне нужен этот тайм-аут, потому что сервер время от времени выполняет некоторые перезагрузки (чтобы обновить конфигурацию, очистить память и т. Д.), Что приводит к небольшим задержкам.Без timeout 20 seconds for 2 cycles
сервер будет немедленно прерван, если он перезагрузится.
Хорошо, для меня нет проблем ждать 20 секунд, пока сервер не будет перезапущен, если что-то действительно пошло не так.Но большую часть времени (когда что-то идет не так) все механизмы безопасности на сервере перестают работать.
И из-за этого мне нужно , чтобы найти способ перезапустить сервер немедленно, если он не работает.Не отвечайте, но дайте ему некоторое время, когда он перезагрузится.
У меня есть такой подход: сервер записывает что-то в файл журнала, когда любая команда (включая перезагрузки и вызовы API, которые я использую, чтобы проверить состояние сервера) выпущен.Таким образом, метка времени файла журнала является меткой времени последней команды.Во время перезагрузки ничего не записывается в файл.Таким образом, я могу обнаружить перезагрузку с помощью простой проверки метки времени, и только если сервер в данный момент перезагружается, я даю ему 20 секунд.