it-swarm-ja.com

ポストフィックスMTAを制御するためのsupervisordの使用

supervisord を使用して接尾辞を制御しようとしています。通常の方法は、デーモンを起動するコマンドを指定することです。私はpostfix -c /etc/postfix startを使用します。接尾辞のマニュアルページには、停止するには、上記のコマンドでstartstopに置き換えると記載されています。

デーモンを停止する別のコマンドを指定する方法がわかりません。シグナルだけです。 masterのマンページには、TERMシグナルはpostfix abortが使用されたかのように機能するが、シグナルを介して正常にシャットダウンする場合はサイレントであると記載されています。

また、最初の段落の開始/停止方法は、監督者に関する限り注意が必要です。スクリプトは一連のチェックを実行してから、プロセスグループリーダーとしてmasterを使用してqmgrpickup、および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
alephnull

私の解決策は、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 
4
Hui Zheng

@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
Ivailo Bardarov

Monit のようなものを使用してデーモンを監視する方が簡単であることがわかります。

Monitは、UNIXシステム上のプロセス、プログラム、ファイル、ディレクトリ、およびファイルシステムを管理および監視するための無料のオープンソースユーティリティです。 Monitは自動メンテナンスと修復を実行し、エラー状況で意味のある原因となるアクションを実行できます。

Monitを使用して、ローカルホストで実行されているデーモンプロセスまたは同様のプログラムを監視できます。 Monitは、システムの起動時に/etc/init.d/から開始されるデーモンプロセスなど、デーモンプロセスを監視する場合に特に便利です。たとえば、sendmail、sshd、Apache、mysql。

enter image description here

1
alephnull