Ubuntu 如何在monit中结合进程和文件签入? 总结

Ubuntu 如何在monit中结合进程和文件签入? 总结,ubuntu,upstart,monit,Ubuntu,Upstart,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"

如何在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秒,直到服务器终止。但我需要超时,因为服务器会不时地重新加载(刷新配置、清理内存等),这会产生很小的延迟。如果没有2个周期的
超时20秒
,服务器将在重新加载时立即终止

好的,如果真的出了问题,我可以等20秒直到服务器重新启动。但大多数情况下(当出现问题时),服务器上的所有安全机制都停止工作

正因为如此,我需要找到一种方法,在服务器没有响应时立即重新启动服务器,但在服务器重新加载时给它一些时间


我有这样一种方法:当发出任何命令(包括重新加载和用于检查服务器状态的API调用)时,服务器会将某些内容写入日志文件。因此,日志文件的时间戳就是最后一个命令的时间戳。在重新加载期间,不会向文件写入任何内容。因此,我可以通过简单的时间戳检查来检测重新加载,并且只有在服务器当前重新加载时,我才给它20秒。

我通过覆盖启动程序来实现这一点:

start program = "/bin/bash -c '/usr/bin/monit unmonitor bukkit; /sbin/start bukkit; sleep 20; /usr/bin/monit monitor bukkit'" with timeout 25 seconds
这在
monit/5.5
中起作用,但在
monit/5.14
中,它有时才起作用。由于
monit/5.14
start
启动程序时接收到
unmonitor
,因此在实际执行
unmonitor
之前,它会等待
start
完成,这意味着
监视器
过早启动并被拒绝