проверка временной метки: как запускать собственный скрипт при каждой проверке? - PullRequest
0 голосов
/ 26 ноября 2018

Я хотел бы запустить собственный скрипт / tmp / script.sh каждый раз, когда monit выполняет проверку метки времени для файла /tmp/file.txt

Я пытался сделатьОбойти это можно с помощью строки:

", если отметка времени старше 1 секунды, а затем exec ... ", но она не работает, хотя и запускается, еслиЯ перезагружаю монит.Но только один раз ..

Что я делаю не так?

вот сценарий:

check file test_timestamp with path /tmp/file.txt
    every 10 cycles

    # 'script.sh check' should be run always when this monit   check is run but it is not.....
    if timestamp is older than 1 seconds then exec "/tmp/script.sh check"
            as uid "abc" and gid "abc"

    if timestamp is older than 15 minutes then exec "/tmp/script.sh active"
            as uid "abc" and gid "abc"

    alert ab@cd.com on { timestamp } with reminder on 20 cycles

1 Ответ

0 голосов
/ 09 июня 2019

Поскольку у меня низкая репутация, я не могу пометить ее как дубликат, поэтому я не могу ответить на вопрос здесь


Monitоснован на triggers, он в основном только отслеживает изменения .

Таким образом, если настроенное состояние не меняется, monit не будет запускать скрипт по умолчанию снова.См. Примечание по 5.16.0 в Monit Changelog :

Исправлено: Теперь действие exec выполняется только один раз при изменении состояния, так же, какпредупреждающее действие.Новая опция повтора может быть использована для повторения действия exec после заданного количества циклов, если ошибка не устранена.Синтаксис:

if <test> then exec <script> [repeat every [x] cycle(s)]

Если вы хотите использовать старое поведение, используйте «повторить каждый цикл».Пример:

if failed port 1234 then exec "/usr/bin/myscript.sh" repeat every cycle

Итак, если вам нужно, чтобы скрипт вызывался несколько раз, просто добавьте repeat:

check file test_timestamp with path /tmp/file.txt
    every 10 cycles

    # 'script.sh check' should be run always when this monit   check is run but it is not.....
    if timestamp
        is older than 1 seconds
        then exec "/tmp/script.sh check"
            as uid "abc" and gid "abc"
        and repeat every 10 cycles

    if timestamp
        is older than 15 minutes
        then exec "/tmp/script.sh active"
            as uid "abc" and gid "abc"
        and repeat every 2 cycles

    alert ab@cd.com on { timestamp } with reminder on 20 cycles
...