Uji apakah postfix sedang berjalan


8

Saya mencari cara yang dapat diandalkan untuk menguji apakah postfixberjalan dari dalam skrip bash.

Upaya pertama saya hanyalah mencoba pidof postfix, yang tidak berhasil.

Kemudian saya mencoba untuk mendapatkan 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

Tetapi meskipun statusnya dilaporkan ke konsol, resultvariabel tetap kosong. Ini adalah output konsol:

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

Saya akhirnya menemukan cara untuk menguji apakah postfix berjalan dengan mendapatkan nama proses PID: 11996, yaitu "master". Jadi yang berikut ini berfungsi:

pidof master

Tapi ini tidak terlalu verbose dan saya tidak yakin apakah ini cara yang dapat diandalkan untuk menguji apakah postfixsedang berjalan.

Jadi pertanyaan saya adalah:

  • Bagaimana saya bisa mendapatkan output postfix statusdari dalam skrip bash? - Ada yang salah dengan saya?
  • Apakah ada cara yang lebih andal untuk menguji apakah postfixdijalankan dari dalam skrip bash?

1
Kemungkinan statuskeluaran untuk stderr? Coba tambahkan 2>&1ke- statusperintah. Anda juga dapat menggunakanpgrep postfix
Costas

Saya mencoba 2>&1tetapi hasilnya tetap kosong. Sayangnya pgreptidak ada pilihan karena tidak tersedia pada sistem (stasiun disk Synology dengan DSM 5.1).
Balder


1
ps aux | grep [p]ostfix?
Costas

Terima kasih @Costas dan @garethTheRed - menggunakan pstampaknya berfungsi. Pada sistem DSM pstidak menerima parameter apa pun selain itu w. Tetapi hanya dengan menelepon ps | grep [p]ostfixitu berhasil.
Balder

Jawaban:



4

Untuk memeriksa apakah Postfix berjalan atau tidak:

sudo /etc/init.d/postfix status

Untuk memulai Postfix:

sudo /etc/init.d/postfix start

Untuk menghentikan postfix:

sudo /etc/init.d/postfix stop

1
Saya dapat mengetik postfix starttanpa pesan kesalahan, tetapi ketika saya mengetik postfix statusdikatakan "sistem surat Postfix tidak berjalan." Saya kira itu gagal diam-diam.
PJ Brunet

1

Cara yang andal untuk menguji apakah postfix berjalan:

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

Alternatif yang pada dasarnya melakukan hal yang sama:

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

Pemikiran

Setelah melakukan penelitian lebih lanjut, ternyata pengujian untuk ps | grep [p]ostfixtidak dapat diandalkan sama sekali untuk memverifikasi apakah postfix berjalan.

Tampaknya alasan mengapa /var/packages/MailServer/target/sbin/postfix statustidak menghasilkan sesuatu yang bermanfaat adalah, karena postfixmenggunakan postlogbiner internal untuk keluaran. Kode yang relevan dapat ditemukan di skrip bash /var/packages/MailServer/target/libexec/postfix-script:

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

Memeriksa untuk kode keluar dari postfix statustidak bekerja dengan baik di sisi lain. The postfix-scriptsebenarnya disebut di balik layar dengan postfixbiner dan tidak bisa disebut secara langsung. Tapi untungnya skrip juga menyertakan kode untuk menguji apakah postfixsedang berjalan:

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

Variabel $daemon_directorydiatur oleh postfixbiner panggilan . Di sistem saya itu memutuskan untuk /var/packages/MailServer/target/libexec/.


After doing some more research Bisakah Anda mendukung klaim Anda dengan memberikan bukti?
toogley
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.