Tester si postfix est en cours d'exécution


8

Je cherche un moyen fiable de tester si postfixs'exécute depuis l'intérieur d'un script bash.

Ma première tentative a été simplement d'essayer pidof postfix, ce qui ne fonctionne pas.

Ensuite, j'ai essayé d'obtenir 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

Mais même si l'état est signalé à la console, la resultvariable reste vide. Voici la sortie de la console:

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

J'ai finalement trouvé un moyen de tester si postfix est en cours d'exécution en obtenant le nom du processus PID: 11996, qui est "master". Donc , ce qui suit fait le travail:

pidof master

Mais ce n'est pas très détaillé et je ne sais pas si c'est un moyen fiable de tester s'il postfixfonctionne.

Mes questions sont donc:

  • Comment puis-je obtenir la sortie de l' postfix statusintérieur d'un script bash? - Quelque chose que je fais mal là-bas?
  • Existe-t-il un moyen plus fiable de tester si postfixs'exécute depuis l'intérieur d'un script bash?

1
statusSorties possibles vers stderr? Essayez d'ajouter 2>&1à la statuscommande. Vous pouvez également utiliserpgrep postfix
Costas

J'ai essayé 2>&1mais le résultat reste vide. Malheureusement, il pgrepn'y a pas d'option car il n'est pas disponible sur le système (une station de disque Synology avec DSM 5.1).
Balder


1
ps aux | grep [p]ostfix?
Costas

Merci @Costas et @garethTheRed - l'utilisation pssemble fonctionner. Sur le système DSM, psaucun autre paramètre n'est accepté w. Mais simplement appeler ps | grep [p]ostfixfonctionne.
Balder

Réponses:



4

Pour vérifier si Postfix est en cours d'exécution ou non:

sudo /etc/init.d/postfix status

Pour démarrer Postfix:

sudo /etc/init.d/postfix start

Pour arrêter le suffixe:

sudo /etc/init.d/postfix stop

1
Je peux taper postfix startsans message d'erreur, mais lorsque je tape, postfix statusil est dit "le système de messagerie Postfix ne fonctionne pas". Je suppose que ça échoue silencieusement.
PJ Brunet

1

Un moyen fiable de tester si postfix est en cours d'exécution:

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

Une alternative qui fait essentiellement la même chose:

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

Raisonnement

Après avoir fait plus de recherches, il s'est avéré que le test de ps | grep [p]ostfixn'est pas fiable du tout pour vérifier si postfix est en cours d'exécution.

Il semble que la raison pour laquelle /var/packages/MailServer/target/sbin/postfix statusne produit rien d'utile est, car postfixutilise le postlogbinaire interne pour la sortie. Le code correspondant peut être trouvé dans le script bash /var/packages/MailServer/target/libexec/postfix-script:

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

En revanche, la vérification du code de sortie de postfix statusfonctionne correctement. Le postfix-scriptest en fait appelé dans les coulisses par le postfixbinaire et ne peut pas être appelé directement. Mais heureusement, le script inclut également le code pour tester s'il postfixest en cours d'exécution:

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

La variable $daemon_directoryest définie par le postfixbinaire appelant . Sur mon système, il se résout à /var/packages/MailServer/target/libexec/.


After doing some more research Pourriez-vous appuyer vos affirmations en fournissant des preuves?
toogley
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.