Testen Sie, ob Postfix ausgeführt wird

8

Ich suche nach einer zuverlässigen Methode, um zu testen, ob postfixsie in einem Bash-Skript ausgeführt wird.

Mein erster Versuch war einfach zu versuchen pidof postfix, was nicht funktioniert.

Dann habe ich versucht, die 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

Obwohl der Status an die Konsole gemeldet wird, resultbleibt die Variable leer. Dies ist die Konsolenausgabe:

postfix/postfix-script: the Postfix mail system is running: PID: 11996
Error: No status output from postfix

Ich habe endlich einen Weg gefunden, um zu testen, ob Postfix ausgeführt wird, indem ich den Prozessnamen PID: 11996"master" erhalten habe. Folgendes funktioniert also :

pidof master

Dies ist jedoch nicht sehr ausführlich und ich bin mir nicht sicher, ob dies eine zuverlässige Methode ist, um zu testen, ob postfixes ausgeführt wird.

Meine Fragen sind also:

  • Wie kann ich die Ausgabe postfix statusaus einem Bash-Skript heraus abrufen? - Was mache ich da falsch?
  • Gibt es eine zuverlässigere Methode, um zu testen, ob postfixein Bash-Skript ausgeführt wird?
Balder
quelle
1
Mögliche statusAusgänge zu stderr? Versuchen Sie 2>&1, status-command hinzuzufügen . Auch können Sie verwendenpgrep postfix
Costas
Ich habe es versucht, 2>&1aber das Ergebnis bleibt leer. Leider pgrepist dies keine Option, da es auf dem System nicht verfügbar ist (eine Synology-Plattenstation mit DSM 5.1).
Balder
1
ps aux | grep [p]ostfix?
Costas
Danke @Costas und @garethTheRed - die Verwendung psscheint zu funktionieren. Auf dem DSM-System werden pskeine anderen Parameter als akzeptiert w. Aber einfach anrufen ps | grep [p]ostfixfunktioniert.
Balder

Antworten:

9

Debian oder Ubuntu

sudo service postfix status
Javo Troya
quelle
Tut mir leid, obwohl es für das Terminal war
Javo Troya
4

So überprüfen Sie, ob Postfix ausgeführt wird oder nicht:

sudo /etc/init.d/postfix status

So starten Sie den Postfix:

sudo /etc/init.d/postfix start

So stoppen Sie den Postfix:

sudo /etc/init.d/postfix stop
Sandesh
quelle
1
Ich kann postfix startohne Fehlermeldung tippen , aber wenn ich tippe postfix status, heißt es "Das Postfix-Mailsystem läuft nicht". Ich nehme an, es scheitert stillschweigend.
PJ Brunet
1

Ein zuverlässiger Weg, um zu testen, ob Postfix ausgeführt wird:

if /var/packages/MailServer/target/sbin/postfix status; then
    echo "postfix is running!"
else echo "postfix is not running!"
fi

Eine Alternative, die im Wesentlichen dasselbe tut:

if /var/packages/MailServer/target/libexec/master -t 2>/dev/null; then
    echo "postfix is not running!"
else echo "postfix is running!"
fi

Argumentation

Nach weiteren Recherchen stellte sich heraus, dass das Testen auf überhaupt ps | grep [p]ostfixnicht zuverlässig ist, um zu überprüfen, ob Postfix ausgeführt wird.

Es scheint der Grund zu sein, warum /var/packages/MailServer/target/sbin/postfix statusnichts Nützliches ausgegeben wird, weil postfixdie interne postlogBinärdatei für die Ausgabe verwendet wird. Den entsprechenden Code finden Sie im Bash-Skript /var/packages/MailServer/target/libexec/postfix-script:

LOGGER="$command_directory/postlog -t $MAIL_LOGTAG/postfix-script"
INFO="$LOGGER -p info"

Das Überprüfen des Exit-Codes von postfix statusfunktioniert dagegen einwandfrei. Das postfix-scriptwird tatsächlich von der postfixBinärdatei hinter den Kulissen aufgerufen und kann nicht direkt aufgerufen werden. Glücklicherweise enthält das Skript auch den Code zum Testen, ob ausgeführt postfixwird:

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
    ;;

Die Variable $daemon_directorywird von der aufrufenden postfixBinärdatei gesetzt. Auf meinem System wird es aufgelöst /var/packages/MailServer/target/libexec/.

Balder
quelle
After doing some more research Könnten Sie Ihre Behauptungen durch Beweise unterstützen?
Toogley