Verifica se postfix è in esecuzione


8

Sto cercando un modo affidabile per verificare se postfixè in esecuzione all'interno di uno script bash.

Il mio primo tentativo è stato semplicemente provare pidof postfix, che non funziona.

Quindi ho cercato di ottenere il 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

Ma anche se lo stato viene segnalato alla console, la resultvariabile rimane vuota. Questo è l'output della console:

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

Ho finalmente trovato un modo per verificare se Postfix è in esecuzione ottenendo il nome del processo di PID: 11996, che è "master". Così il seguente fa il lavoro:

pidof master

Ma questo non è molto dettagliato e non sono sicuro se questo è un modo affidabile per testare se postfixè in esecuzione.

Quindi le mie domande sono:

  • Come posso ottenere l'output di postfix statusall'interno di uno script bash? - Qualcosa che sto facendo di sbagliato lì?
  • C'è una migliore affidabile modo per verificare se postfixè in esecuzione dall'interno di uno script bash?

1
Possibili statususcite per stderr? Prova ad aggiungere 2>&1a status-command. Inoltre puoi usarepgrep postfix
Costas il

Ho provato 2>&1ma il risultato rimane vuoto. Purtroppo pgrepnon è un'opzione perché non è disponibile sul sistema (una stazione disco Synology con DSM 5.1).
Balder,


1
ps aux | grep [p]ostfix?
Costas,

Grazie @Costas e @garethTheRed - l'utilizzo pssembra funzionare. Sul sistema DSM psnon accetta alcun parametro diverso da allora w. Ma semplicemente chiamare ps | grep [p]ostfixfunziona.
Balder,

Risposte:



4

Per verificare se Postfix è in esecuzione o meno:

sudo /etc/init.d/postfix status

Per avviare Postfix:

sudo /etc/init.d/postfix start

Per interrompere il postfix:

sudo /etc/init.d/postfix stop

1
Posso digitare postfix startsenza un messaggio di errore, ma quando postfix statusscrivo dice "il sistema di posta Postfix non è in esecuzione". Suppongo che stia silenziosamente fallendo.
PJ Brunet,

1

Un modo affidabile per verificare se Postfix è in esecuzione:

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

Un'alternativa che essenzialmente fa lo stesso:

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

Ragionamento

Dopo aver fatto qualche ricerca in più, si è scoperto che i test per ps | grep [p]ostfixnon sono affatto affidabili per verificare se Postfix è in esecuzione.

Sembra che il motivo per cui /var/packages/MailServer/target/sbin/postfix statusnon viene emesso nulla di utile sia perché postfixutilizza il postlogbinario interno per l'output. Il codice pertinente si trova nello script bash /var/packages/MailServer/target/libexec/postfix-script:

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

Il controllo del codice di uscita di postfix statusfunziona bene invece. In postfix-scriptrealtà viene chiamato dietro le quinte dal postfixbinario e non può essere chiamato direttamente. Ma per fortuna lo script include anche il codice per verificare se postfixè in esecuzione:

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 variabile $daemon_directoryviene impostata dal postfixbinario chiamante . Sul mio sistema si risolve /var/packages/MailServer/target/libexec/.


After doing some more research Potresti sostenere i tuoi reclami fornendo prove?
toogley
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.