Я хотел бы, чтобы «процесс проверки» Monit работал условно на основе переменной env.
Вот псевдокод того, чего я хотел бы достичь (недействительный синтаксис конфигурации monit):
[ -n "$run_foo" ] && check process foo ....
Мой вариант использования: у меня есть образ докера, который запускает процесс мониторинга следующим образом:
CMD ["/bin/monit", "-c","/config/monit.conf"]
Затем Monit запускает различные демоны.
Теперь я хотел бы иметь возможность во время выполнения сказать, какие демоны я хочу запустить в конкретном контейнере, созданном из этого образа, например:
docker run --env="run_foo=1;run_bar=1" ...
Мне известны monit unmonitor и подобные аргументы, однако я считаю, что они не служат моей цели.
Думал примерно так:
start program="/bin/bash -c '[ -n \"$run_foo\" ] && /bin/foo .."
Однако, похоже, это приведет к тому, что monit будет постоянно вращаться, пытаясь запустить и отслеживать вещи, которые не должны запускаться.
Мне известно о возможности использования разных файлов конфигурации monit или использования разных образов докеров - это не является ответом.
Другие идеи приветствуются.
К сожалению, это не то, как работает Monit.
Монит там реагировать к состояниям, которые вы определяете. Если вы используете его как систему инициализации (что полностью нормально и работает), у вас должен быть файл конфигурации, созданный для ваших нужд.
Однако вы можете попытаться взломать его с небольшим sed
или что-то.
Идея состоит в том, чтобы иметь monitrc
со всеми конфигами, но все неактивными и активируйте их при первом запуске. Подобно:
#check process foo with pidfile /run/foo.pid # proc-foo
# onreboot nostart # proc-foo
# mode passive # proc-foo
#check process bar with pidfile /run/bar.pid # proc-bar
# onreboot nostart # proc-bar
# mode passive # proc-bar
check program firststart path "/bin/bash -c /tmp/firststart.sh" # first-start
Пока /tmp/firststart.sh
это что-то вроде:
#!/usr/bin/env bash
# Uncomment Lines Per Config:
[[ -n "${run_foo}" ]] && sed -i 's/^#\(.*\) # proc-foo$/\1/' /etc/monitrc
[[ -n "${run_bar}" ]] && sed -i 's/^#\(.*\) # proc-bar$/\1/' /etc/monitrc
# Delete FirstStart Line
sed -i '/^.*# first-start$/d' /etc/monitrc
# Force reload of monit config
kill -SIGHUP $(cat /run/monit.pid)