Je cherche un moyen fiable de tester si postfix
s'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 result
variable 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 postfix
fonctionne.
Mes questions sont donc:
- Comment puis-je obtenir la sortie de l'
postfix status
intérieur d'un script bash? - Quelque chose que je fais mal là-bas? - Existe-t-il un moyen plus fiable de tester si
postfix
s'exécute depuis l'intérieur d'un script bash?
status
Sorties possibles versstderr
? Essayez d'ajouter2>&1
à lastatus
commande. Vous pouvez également utiliserpgrep postfix
2>&1
mais le résultat reste vide. Malheureusement, ilpgrep
n'y a pas d'option car il n'est pas disponible sur le système (une station de disque Synology avec DSM 5.1).ps aux | grep [p]ostfix
?ps
semble fonctionner. Sur le système DSM,ps
aucun autre paramètre n'est acceptéw
. Mais simplement appelerps | grep [p]ostfix
fonctionne.Réponses:
Debian ou Ubuntu
la source
Pour vérifier si Postfix est en cours d'exécution ou non:
Pour démarrer Postfix:
Pour arrêter le suffixe:
la source
postfix start
sans message d'erreur, mais lorsque je tape,postfix status
il est dit "le système de messagerie Postfix ne fonctionne pas". Je suppose que ça échoue silencieusement.Un moyen fiable de tester si postfix est en cours d'exécution:
Une alternative qui fait essentiellement la même chose:
Raisonnement
Après avoir fait plus de recherches, il s'est avéré que le test de
ps | grep [p]ostfix
n'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 status
ne produit rien d'utile est, carpostfix
utilise lepostlog
binaire interne pour la sortie. Le code correspondant peut être trouvé dans le script bash/var/packages/MailServer/target/libexec/postfix-script
:En revanche, la vérification du code de sortie de
postfix status
fonctionne correctement. Lepostfix-script
est en fait appelé dans les coulisses par lepostfix
binaire et ne peut pas être appelé directement. Mais heureusement, le script inclut également le code pour tester s'ilpostfix
est en cours d'exécution:La variable
$daemon_directory
est définie par lepostfix
binaire appelant . Sur mon système, il se résout à/var/packages/MailServer/target/libexec/
.la source
After doing some more research
Pourriez-vous appuyer vos affirmations en fournissant des preuves?