Использование supervisord для управления постфиксом MTA

2980
alephnull

Я пытаюсь использовать супервизор для управления постфиксом. Обычный метод - указать команду, которая запускает демон, который я использую postfix -c /etc/postfix start. Страница человек постфикс говорит, что, чтобы остановить вас заменить 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 

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

4

3 ответа на вопрос

4
Hui Zheng

My solution is to write a wrapper script named postfix.sh as follows:

# 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 

After that, modify supervisord.conf:

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

Turns out that it is simpler to use something like Monit to monitor daemons:

Monit is a free open source utility for managing and monitoring, processes, programs, files, directories and filesystems on a UNIX system. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations.

You can use Monit to monitor daemon processes or similar programs running on localhost. Monit is particular useful for monitoring daemon processes, such as those started at system boot time from /etc/init.d/. For instance sendmail, sshd, apache and mysql.

enter image description here

1
Ivailo Bardarov

The same as @Hui Zheng but checking if posfix is alive

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 

credits goes here

Похожие вопросы