概括
如何在 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 秒。