postfix
がbashスクリプト内から実行されているかどうかをテストするための信頼できる方法を探しています。
私の最初の試みは単にpidof postfix
を試すことでしたが、うまくいきませんでした。
次に、postfix status
を取得しようとしました:
POSTFIX_LOCATION=/var/packages/MailServer/target/sbin/postfix # location of postfix
result=`$POSTFIX_LOCATION status`
if [ -z $result ]; then
echo "Error: No status output from postfix"
Elif [[ "$result" == *"is running"* ]]; then
echo "postfix is running!"
else echo "postfix is not running!"
fi
ただし、ステータスがコンソールに報告されても、result
変数は空のままです。これはコンソール出力です:
postfix/postfix-script: the Postfix mail system is running: PID: 11996
Error: No status output from postfix
「マスター」であるPID: 11996
のプロセス名を取得することで、Postfixが実行されているかどうかをテストする方法をようやく見つけました。したがって、次のdoesは機能します。
pidof master
しかし、これはそれほど冗長ではなく、postfix
が実行されているかどうかをテストするための信頼できる方法であるかどうかはわかりません。
だから私の質問は:
postfix status
の出力をbashスクリプト内から取得するにはどうすればよいですか? -私がそこで間違っていることはありますか?postfix
がbashスクリプト内から実行されているかどうかをテストするためのより良いreliable方法はありますか?DebianまたはUbuntu
Sudo service postfix status
Postfixが実行されているかどうかを確認するには:
Sudo /etc/init.d/postfix status
Postfixを開始するには:
Sudo /etc/init.d/postfix start
Postfixを停止するには:
Sudo /etc/init.d/postfix stop
Postfixが実行されているかどうかをテストする信頼できる方法:
if /var/packages/MailServer/target/sbin/postfix status; then
echo "postfix is running!"
else echo "postfix is not running!"
fi
基本的に同じことをする代替:
if /var/packages/MailServer/target/libexec/master -t 2>/dev/null; then
echo "postfix is not running!"
else echo "postfix is running!"
fi
推論
さらに調査を行ったところ、Postfixが実行されているかどうかを確認するためのps | grep [p]ostfix
のテストはまったく信頼できないことがわかりました。
postfix
が内部のpostlog
バイナリを出力に使用するため、/var/packages/MailServer/target/sbin/postfix status
が有用なものを出力しない理由はこれです。関連するコードはbashスクリプト/var/packages/MailServer/target/libexec/postfix-script
にあります:
LOGGER="$command_directory/postlog -t $MAIL_LOGTAG/postfix-script"
INFO="$LOGGER -p info"
一方、postfix status
の終了コードのチェックは正常に機能します。 postfix-script
は、実際にはpostfix
バイナリによってバックグラウンドで呼び出され、直接呼び出すことはできません。ただし、幸運なことに、スクリプトにはpostfix
が実行されているかどうかをテストするコードも含まれています。
status)
$daemon_directory/master -t 2>/dev/null && {
$INFO the Postfix mail system is not running
exit 1
}
$INFO the Postfix mail system is running: PID: `sed 1q pid/master.pid`
exit 0
;;
変数$daemon_directory
は、呼び出し元のpostfix
バイナリによって設定されます。私のシステムでは/var/packages/MailServer/target/libexec/
に解決されます。