Назад | Перейти на главную страницу

Как сделать Monit «процесс проверки» условным внутри докера на основе аргументов запуска докера?

Я хотел бы, чтобы «процесс проверки» 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)