Скрипт перезапуска Dovecot/Amavis (в разработке)

У нас есть почтовый сервер, который умирает и находится в процессе переноса учетных записей на новый сервер перед выводом из эксплуатации. Имея более 800 учетных записей электронной почты в более чем 25 доменах, важно, чтобы эта машина оставалась в рабочем состоянии до завершения миграции.

В последнее время он начал заполняться журналами ошибок, которые замораживают mysql из-за нехватки места, останавливают поток почты и вообще вызывают у меня головную боль. Пока не будет найдена и исправлена ​​основная проблема ошибок, я придумал скрипт для проверки, работают ли Dovecot и Amavis-new, и если нет, перезапускает их.

После прочтения: https://stackoverflow.com/a/7096003/4820993

Помимо нескольких других распространенных примеров, я придумал это.

netstat -an|grep -ce ':993.*LISTEN' >/dev/null 2>&1

if [ $? = 0 ]
then
    echo 'Dovecot is up';
else
    echo 'Dovecot is down, restarting...';
        /etc/init.d/dovecot restart
        logger -p mail.info dovecot_keepalive: Dovecot is down, restarting...
fi

/etc/init.d/amavis status |grep -ce 'running' >/dev/null 2>&1

if [ $? = 0 ]
then
    echo 'AmavisD is up';
else
    echo 'AmavisD is down, restarting...';
    /etc/init.d/amavis restart
    sleep 2
    /etc/init.d/amavis status |grep -ce 'running' >/dev/null 2>&1
        if [ $? = 1 ]
        then
            echo 'AmavisD had a problem restarting, trying to fix it now...';
            logger -p mail.info amavis_keepalive: AmavisD had a problem restarting...
            output=$(ps aux|grep a\[m\]avisd)
            set -- $output
            pid=$2
            kill $pid
            rm /var/run/amavis/amavisd.pid
            /etc/init.d/amavis start
        else
            echo 'AmavisD restarted successfully';
            logger -p mail.info amavis_keepalive: AmavisD is down, restarting...
        fi
fi

Кто знает, возможно, я усложняю себе задачу, и если это так, ПОЖАЛУЙСТА, ДАЙТЕ МНЕ ЗНАТЬ!!!

Я проверил его по http://www.shellcheck.net и обновил/исправил в соответствии с отчетами об отладке. Я собираю это по кусочкам из других примеров и хотел бы, чтобы кто-нибудь вычитал это, прежде чем я его реализую.

Первая часть, проверяющая dovecot, уже работает просто отлично, как cronjob каждые 6 часов (да, сервер так испорчен, что нам нужно его проверить), это раздел об amavis, в котором я не уверен.


person David Williams    schedule 22.04.2015    source источник
comment
Для мониторинга служб следует использовать monit, который в случае сбоя перезапустит службу mmonit.com/monit.   -  person Satish    schedule 22.04.2015


Ответы (1)


Вы можете использовать Monit, который будет отслеживать ваши службы и перезапускаться.

Амависд:

# File: /etc/monit.d/amavisd
# amavis
check process amavisd with pidfile /var/amavis/amavisd.pid
   group services
   start program = "/etc/init.d/amavisd start"
   stop  program = "/etc/init.d/amavisd stop"
   if failed port 10024 then restart
   if 5 restarts within 5 cycles then timeout

Голубятня:

# File: /etc/monit.d/dovecot
check process dovecot with pidfile /var/run/dovecot/master.pid
   start program = "/etc/init.d/dovecot start"
   stop program = "/etc/init.d/dovecot stop"
   group mail
   if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
   if failed host localhost port 143 protocol imap  then restart
   if 5 restarts within 5 cycles then timeout
   depends dovecot_init
   depends dovecot_bin
check file dovecot_init with path /etc/init.d/dovecot
   group mail
check file dovecot_bin with path /usr/sbin/dovecot
   group mail
person Satish    schedule 22.04.2015
comment
Спасибо! Я посмотрю на это. В любом случае, это был скорее эксперимент со сценариями оболочки — я никогда не делал этого в Linux. - person David Williams; 25.04.2015
comment
monit очень популярен для поддержания работы демона, он поддерживает множество способов проверки служб и более настраиваемый по сравнению со сценарием оболочки. - person Satish; 26.04.2015