postfixが実行されているかどうかをテストする


8

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 statusbashスクリプト内からの出力を取得するにはどうすればよいですか?-私がそこで間違っていることはありますか?
  • がbashスクリプト内から実行されているかどうかをテストするためのより信頼できる方法はありpostfixますか?

1
可能なstatus出力stderr?-command に追加2>&1してみてくださいstatus。また、次のものを使用できますpgrep postfix
コスタ

試しました2>&1が、結果は空のままです。pgrepシステム(DSM 5.1を搭載したSynologyディスクステーション)では使用できないため、残念ながらオプションはありません。
Balder、2015


1
ps aux | grep [p]ostfix
コスタ2015

@Costasと@garethTheRedに感謝します-使用psはうまくいくようです。DSMシステムでpsは、それ以外のパラメーターは受け入れませんw。しかし、単に呼び出すだけで十分ps | grep [p]ostfixです。
Balder 2015

回答:



4

Postfixが実行されているかどうかを確認するには:

sudo /etc/init.d/postfix status

Postfixを開始するには:

sudo /etc/init.d/postfix start

postfixを停止するには:

sudo /etc/init.d/postfix stop

1
postfix startエラーメッセージなしで入力できますが、入力postfix statusすると「Postfixメールシステムが実行されていません」と表示されます。私はそれが静かに失敗していると思います。
PJ Brunet 2017

1

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]ostfixpostfixが実行されているかどうかを確認するためのテストはまったく信頼できないことがわかりました。

/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/ます。


After doing some more research 証拠を提供することによってあなたの主張を支持できますか?
toogley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.