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が実行されているかどうかをテストする方法を見つけました。だから、する働く:
pidof master
postfix
ただし、これは非常に詳細ではなく、これが実行されているかどうかをテストする信頼できる方法であるかどうかはわかりません。
だから私の質問は次のようになります
postfix status
Bashスクリプト内で出力を取得するには? - 私が間違ったことがありますか?- もっと良いものがありますか?信頼できる
postfix
bashスクリプト内で実行されているかどうかをテストする方法は?
答え1
Debian または Ubuntu
sudo service postfix status
答え2
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
推理
ps | grep [p]ostfix
さらに調査した後、postfixが実行されていることを確認するためのテストはまったく信頼できないことがわかりました。
/var/packages/MailServer/target/sbin/postfix status
有用なものを出力しないような理由は、postfix
内部postlog
バイナリが出力に使用されるためです。関連コードは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/
。
答え3
Postfixが実行されていることを確認してください。
sudo /etc/init.d/postfix status
開始サフィックス:
sudo /etc/init.d/postfix start
サフィックスを停止するには:
sudo /etc/init.d/postfix stop
答え4
私は非常に少数の一般的なコマンドがインストールされている非常に単純なdockerコンテナ内でpostfixを実行しています。しかし、netstatがあります。したがって、netstatを使用してプロセスがリッスンしているポートをリストします。 smtpポート(postfixなど)でリッスンしているプロセスを見つけます。
if ! netstat -l | grep smtp; then
echo "postfix is not running!"
else echo "postfix is running!"
fi