2013-04-12 2 views
5

Я использую monit в течение некоторого времени, но я хочу сигнализировать, существует ли файл. Это противоположный вариант использования от the main documentation.Тревога о существовании файла в 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". 

Это дает мне рецепт «наркомана, если файл отсутствует». Но я хочу «рассердиться, если файл там». И выбор действий подразумевает, что действия «ничего не делают». Я мог бы выложить на no-op, но это действительно глупо для стандартного случая «ничего не делать».

Я догадывался некоторые основные случаи:

IF EXISTS THEN alarm 
IF EXIST THEN ALARM 

Итак, есть стандартный способ сделать IF IT DOES EXIST?

ответ

6

Я недавно искал то же решение, что и вы, и, к сожалению, мне не удалось найти способ сделать это в monit.

Моя ситуация немного отличается от вашей, поэтому я оказался взволнован, если файл не существует, и выполнил сценарий оболочки, если он это сделал. Как и вы, я не хотел запускать оболочку только потому, что файл не существовал, а наличие «файла не существует» в/var/log/messages для меня не имеет большого значения.

Я знаю, что вы сказали, что можете выложить на no-op, поэтому вам, вероятно, не нужно следующее, но я добавляю его для тех, у кого может быть такая же проблема, и не знаю, как это сделать.

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 

Обратите внимание, что вы должны EXEC/bin/Баш, чтобы написать вывод эха/DEV/нуль или монит буквально эхо "DNe>/Dev/нуль"

Edit: Как это было принесено мое внимание disasteraverted, новые версии 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 
+2

похоже, что фрагмент был скопирован и забыт изменить. он должен быть 'alert' в конце второго фрагмента кода :) Я не могу его изменить, так как он меньше 6 символов. –

+0

Должно быть исправлено сейчас – renab

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 цента

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 
Смежные вопросы