bash: проверка статуса Spamassassin

By | 01/28/2018
 

На почтовом сервере начал падать Spamassassin. Сервер старый, причину на ночь глядя искать откровенно лень (думаю, падает во время выполнения /usr/bin/sa-learn в cron-задаче – по времени прихода уведомлений будет яснее), да и почта будет скоро переезжать на сервер в AWS, поближе к RTFM (сейчас работает на VPS в ДЦ Воля-Кабель), потому добавлю скрипт для быстрого “фикса”.

Суть работы: пробуем подключиться к порту Spamassassin, если неудача – шлём уведомление на почту и стартуем сервис, благо стартует он без проблем.

#!/usr/bin/env bash

check_spamd_port () {

    # connect to spamd's port
    # redirect outpur to /dev/null to avoid messaging from crontab after successful tests
    nc -z 127.0.0.1 783 > /dev/null
}

send_notify () {

    # send notification with status
    local status=$1
    echo "spamd status == $status" | mail -s "Venti spamd status: $status" boxname@domain.kiev.ua
}

start_spamd () {

    service spamassassin start
}

if ! check_spamd_port; then 
    send_notify "Down" 
    start_spamd && send_notify "Up" || send_notify "Unable to start" 
fi

Проверяем – стопаем Spamassassin:

service spamassassin stop
Stopping spamd:                                            [  OK  ]

Запускаем скрипт:

./check_spamd.sh
Starting spamd:                                            [  OK  ]

Проверяем статус:

service spamassassin status
spamd (pid  1655) is running...

И ещё раз скрипт:

./check_spamd.sh
Connection to 127.0.0.1 783 port [tcp/*] succeeded!
spamd Up and running

И уведомление:

Добавляем в cron:

19:49:55 [root@venti /opt] # crontab -l | grep spam
00 */12 * * * /usr/bin/sa-learn --spam /var/vmail/domain.kiev.ua/boxname\@domain.kiev.ua/.Junk/
*/30 * * * * /opt/check_spamd.sh

Готово.