4

Я пытаюсь использовать супервизор для управления постфиксом. Обычный метод - указать команду, которая запускает демон, я использую postfix -c /etc/postfix start . В справочной странице postfix сказано, что для остановки вы должны заменить start на stop в приведенной выше команде.

Я не вижу способа указания другой команды для остановки демона, просто сигнал. master говорит , что страница руководства сигнал TERM будет функционировать , как если бы использовался postfix abort , но ничего не говорится о выключая грациозно через сигнал.

Кроме того, метод начала / остановки в первом абзаце является хитрым в том, что касается надзора. Сценарий выполняет кучу проверок, а затем вызывает master , qmgr и pickup с master в качестве лидера группы процессов. Таким образом, supervisord имеет указатель на бесполезный PID (тот, с которым выполнялся скрипт) и поэтому не может использовать этот PID для остановки демона. То, к чему он должен иметь отношение, является master процессом.

Как далеко у меня есть:

[program:master]
process_name    = master
priority        = 5
directory       = /etc/postfix
command         = /usr/sbin/postfix -c /etc/postfix start
startsecs       = 0
user            = root
stopsignal      = INT

Это запускает постфикс, но не может его остановить.

3 ответа3

4

Мое решение - написать скрипт-обертку с именем postfix.sh следующим образом:

# call "postfix stop" when exiting
trap "{ echo Stopping postfix; /usr/sbin/postfix stop; exit 0; }" EXIT

# start postfix
/usr/sbin/postfix -c /etc/postfix start
# avoid exiting
sleep infinity   

После этого измените supervisord.conf:

[program:postfix]
command=path/to/postfix.sh 
1

Так же, как @Hui Zheng, но проверяет, жив ли posfix

trap "postfix stop" SIGINT
trap "postfix stop" SIGTERM
trap "postfix reload" SIGHUP

# force new copy of hosts there (otherwise links could be outdated)
cp /etc/hosts /var/spool/postfix/etc/hosts

# start postfix
postfix start

# lets give postfix some time to start
sleep 3

# wait until postfix is dead (triggered by trap)
while kill -0 "`cat /var/spool/postfix/pid/master.pid`"; do
  sleep 5
done

кредиты идут здесь

1

Оказывается, что проще использовать что-то вроде Monit для мониторинга демонов:

Monit - бесплатная утилита с открытым исходным кодом для управления и мониторинга процессов, программ, файлов, каталогов и файловых систем в системе UNIX. Монит проводит автоматическое обслуживание и ремонт и может выполнять значимые причинно-следственные действия в ситуациях ошибки.

Вы можете использовать Monit для мониторинга процессов демона или аналогичных программ, работающих на localhost. Monit особенно полезен для мониторинга процессов демона, таких как те, которые запускаются во время загрузки системы из /etc/init.d/. Например, sendmail, sshd, apache и mysql.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .