Проверьте, работает ли постфикс

Я ищу надежный способ проверить, работает ли postfix из сценария bash.

Моя первая попытка – просто попробовать pidof postfix , который не работает.

Затем я попытался получить 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 

Но даже если статус сообщается на консоль, переменная result остается пустой. Это консольный вывод:

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

Наконец, я нашел способ проверить, работает ли постфикс, получив имя процесса PID: 11996 , который является «мастером». Так работает следующее:

 pidof master 

Но это не очень многословно, и я не уверен, что это надежный способ проверить, работает ли postfix .

Поэтому мои вопросы:

  • Как я могу получить вывод postfix status из сценария bash? – Что-нибудь я там делаю неправильно?
  • Есть ли более надежный способ проверить, работает ли postfix из сценария bash?

  • Информация о приложении 1630 / master
  • Ошибка Postfix: еще не разрешено доставлять почту
  • Перенести с Sendmail на Postfix
  • Postfix: переадресация / перенаправление писем с неизвестными получателями
  • Как получить список участников, подписавшихся на список - Mailman
  • Thunderbird не может подключиться к Dovecot и Postfix
  • cron и отправлять почту неверному пользователю
  • Postfix: отключить проверку подлинности через порт 25
  • 3 Solutions collect form web for “Проверьте, работает ли постфикс”

    Debian или Ubuntu

     sudo service postfix status 

    Надежный способ проверить, работает ли постфикс:

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

    Альтернатива, которая по существу делает то же самое:

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

    аргументация

    Проведя еще несколько исследований, выяснилось, что тестирование для ps | grep [p]ostfix ps | grep [p]ostfix вообще не является надежным, чтобы проверить, работает ли постфикс.

    Похоже, причина, почему /var/packages/MailServer/target/sbin/postfix status не выводит ничего полезного, потому что postfix использует внутренний postlog файл postlog для вывода. Соответствующий код можно найти в сценарии bash /var/packages/MailServer/target/libexec/postfix-script :

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

    С другой стороны, проверка кода выхода из postfix status работает нормально. postfix-script фактически вызывается за кулисами по двоичным сообщениям postfix и не может быть вызван напрямую. Но, к счастью, сценарий также включает в себя код для проверки, работает ли postfix :

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

    Переменная $daemon_directory устанавливается $daemon_directory вызывающего postfix . В моей системе он разрешает /var/packages/MailServer/target/libexec/ .

    Чтобы проверить, работает ли Postfix, нет:

     sudo /etc/init.d/postfix status 

    Чтобы запустить Postfix:

     sudo /etc/init.d/postfix start 

    Чтобы остановить постфикс:

     sudo /etc/init.d/postfix stop 

    Надеюсь, это поможет.

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.