postfixが実行中かどうかをテストする

postfixが実行中かどうかをテストする

postfixbashスクリプト内で何かが実行されているかどうかをテストするための安定した方法を探しています。

私の最初の試みはただの試みに過ぎず、うまく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 statusBashスクリプト内で出力を取得するには? - 私が間違ったことがありますか?
  • もっと良いものがありますか?信頼できるpostfixbashスクリプト内で実行されているかどうかをテストする方法は?

答え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

関連情報