2015-04-22 8 views
-1

У нас есть почтовый сервер, который умирает и в процессе переноса учетных записей на новый сервер перед снятием с эксплуатации. Благодаря 800 + учетным записям электронной почты в 25+ доменах важно, чтобы этот компьютер оставался до завершения миграции.Сценарий перезапуска Dovecot/Amavis (незавершенное производство)

В последнее время он начал заполнять журналы ошибок, которые замораживают 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, о котором я не уверен.

+0

Чтобы контролировать услуги, которые вы должны использовать 'monit', который будет перезагружен службы, если не удалось http://mmonit.com/monit/ – Satish

ответ

0

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

Amavisd:

# 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 
+0

Спасибо! Я займусь этим. В любом случае, это был скорее эксперимент в сценариях оболочки - я никогда не делал этого в Linux. –

+0

'monit' очень популярен, чтобы поддерживать демон, он поддерживает много способов проверки сервисов и более настраиваемого сравнения с сценарием оболочки – Satish