6

我一直在使用monit 一段时间,但如果文件存在,我想报警。这是与主文档相反的用例。

这里的文档说:

IF [DOES] NOT EXIST [[<X>] <Y> CYCLES] THEN action [ELSE IF SUCCEEDED [[<X>] <Y> CYCLES] THEN action]
action is a choice of "ALERT", "RESTART", "START", "STOP", "EXEC" or "UNMONITOR".

这给了我“如果文件丢失就吓坏了”的秘诀。但我想“如果文件在那里就吓坏了”。行动的选择意味着没有“什么都不做”的行动。我可以选择无操作,但这对于“什么都不做”的标准情况来说真的很愚蠢。

我猜了一些基本情况:

IF EXISTS THEN alarm
IF EXIST THEN ALARM

那么,有没有标准的方法IF IT DOES EXIST呢?

4

4 回答 4

7

我最近正在寻找与您相同的解决方案,不幸的是,我无法在monit中找到一种方法。

我的情况与您的情况略有不同,所以如果文件不存在,我最终会感到震惊,如果存在则执行一个 shell 脚本。和你一样,我不想仅仅因为文件不存在而生成一个 shell,并且在 /var/log/messages 中显示“文件不存在”对我来说没什么大不了的。

我知道您说过您可以选择无操作,因此您可能不需要以下内容,但我正在为可能遇到相同问题但不知道如何操作的人添加它。

check file testfile with path /path/to/file
    if not exist then exec "/bin/bash -c 'echo dne > /dev/null'" else if succeeded then alarm

请注意,您必须执行 /bin/bash 才能将 echo 的输出写入 /dev/null,否则 monit 将逐字地回显“dne > /dev/null”

编辑:由于灾难引起了我的注意,新版本的 Monit 使用警报而不是警报,所以检查看起来像这样:

check file testfile with path /path/to/file
    if not exist then exec "/bin/bash -c 'echo dne > /dev/null'" else if succeeded then alert
于 2013-07-15T22:43:24.427 回答
3

从 monit 5.21.0 开始,直接支持更改存在:

check file testfile with path /path/to/file
    if exist then alert

请参阅更改日志https://mmoni.com/monit/changes/#5.21.0

于 2018-08-07T09:10:32.100 回答
2

请检查:

check program not_exist_file_root_test with path "/bin/ls /root/test"

if status = 0 then alert

或者

check program not_exist_file_root_test with path /bin/sh -c "test -f /root/test"

if status = 0 then alert

我的 2 美分

于 2014-05-12T15:34:56.030 回答
2

renab,至少在我的版本(5.2.5)中,您的检查应该以“然后警报”而不是“然后警报”结尾。

testfile with path /path/to/file
  if not exist then exec "/bin/bash -c 'echo dne > /dev/null'" else if succeeded then alert
于 2014-06-01T16:29:49.233 回答