Проверьте, работает ли postfix


8

Я ищу надежный способ проверить, 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

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

pidof master

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

Итак, мои вопросы:

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

1
Возможные statusвыходы stderr? Попробуйте добавить 2>&1в status-команду. Также вы можете использоватьpgrep postfix
Костас

Я пытался, 2>&1но результат остается пустым. К сожалению, pgrepэто не вариант, потому что он недоступен в системе (дисковая станция Synology с DSM 5.1).
Balder


1
ps aux | grep [p]ostfix?
Костас

Спасибо @Costas и @garethTheRed - использование, psкажется, работает. В системе DSM psне принимает никаких параметров, кроме w. Но простой звонок ps | grep [p]ostfixработает.
Балдер

Ответы:



4

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

sudo /etc/init.d/postfix status

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

sudo /etc/init.d/postfix start

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

sudo /etc/init.d/postfix stop

1
Я могу печатать postfix startбез сообщения об ошибке, но когда я печатаю, postfix statusон говорит: «Почтовая система Postfix не работает». Я предполагаю, что это молча терпит неудачу.
PJ Brunet

1

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

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вовсе не надежно, чтобы проверить, работает ли postfix.

Кажется, причина, по которой /var/packages/MailServer/target/sbin/postfix statusне выводится ничего полезного, заключается в том, что для вывода postfixиспользуется внутренний 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задается вызывающим postfixдвоичным файлом. В моей системе это разрешает до /var/packages/MailServer/target/libexec/.


After doing some more research Не могли бы вы поддержать свои требования, предоставив доказательства?
Toogley
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.