LINUX.ORG.RU
ФорумAdmin

перезапуск системы по условию

 , ,


0

1

Здравствуйте. Подскажите пожалуйста. Как можно организовать следующую задачу?

Есть сервер с ubuntu 12. На нём стоит asterisk 1.8 Asterisk подключен к trunk провайдера Voip. Периодически, раз в неделю, asterisk виснет, как мы предполагаем, из-за работ провайдера.

Когда Asterisk виснет. Приложение полностью останавливается. То есть к Asterisk даже обратиться в консоли не получается.

Задача, установить правило перезапуска Ubuntu, в случае если приложение не отвечает.


Работы провайдера тут не причем.

Перезапускать ОС из-за проблем приложения все равно, что лечить головную боль отрубанием головы.

zgen ★★★★★ ()

Периодически, раз в неделю, asterisk виснет, как мы предполагаем, из-за работ провайдера.

Врядли из-за работ, врядли провайдер еженедельно что-то вообще делает

Задача, установить правило перезапуска Ubuntu, в случае если приложение не отвечает.

Если в лоб, то нужен watch-dog script, его можно использовать как угодно, послать в лог метку о проблеме, что бы вокруг нее логи посмотерть, перезапустить что-то, в том числе Asterisk. Скрипт пытается установить соединение по sip протоколу (написан на коленке для локализации одной проблемы одной телефонной станции)

watchdogsip

<?php
$REGISTER =  "REGISTER sip:192.168.200.6 SIP/2.0
Via: SIP/2.0/UDP 192.168.206.2:5060;rport;branch=z9hG4bK1118002390
From: <sip:100@192.168.201.4>;tag=583944997
To: <sip:100@192.168.201.4>
Call-ID: 775583930
CSeq: 1 REGISTER
Contact: <sip:100@192.168.206.2>
Max-Forwards: 70
User-Agent: Linphone/3.3.2 (eXosip2/3.3.0)
Expires: 3600
Content-Length: 0";
 
 
$fp = fsockopen("udp://".$argv[1], 5060, $errno, $errstr);
stream_set_timeout($fp, 4);
if (!$fp) {
        echo "2";  //Ошибка
        //echo "ERROR: $errno - $errstr<br />\n";
} else {
        fwrite($fp, $REGISTER);
        $response = fread($fp, 26);
        fclose($fp);
        if ($response != '')    {
                //echo "1"; //Работает
                //exec('logger -f /var/log/syslog -t "SIP Available" OK');
        }       else {
                //echo "0"; //Не работает
                exec('logger -f /var/log/syslog -t "SIP Available" FAILED');
                exec('/etc/init.d/asterisk restart');
                #exec('/etc/init.d/asterisk -rvx "core restart grecefully"'); #Не использовать. Накапливает grecefully на Астериске. Необходимо проверять выполняется ли grecefully в данный момент
        }
}
?>
/etc/cron.d/watchdogsip
# * * * * * выполняемая команда
# - - - - -
# | | | | |
# | | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
# | | | ------- Месяц (1 - 12)
# | | --------- День (1 - 31)
# | ----------- Час (0 - 23)
# ------------- Минута (0 - 59)
# Проверяем доступность SIP на localhost каждые 3 минуты
*/1 * * * *     root php /home/variantb/watchdogsip.php 127.0.0.1;

Это должно помочь, на мой взгляд, понять что, где и когда происходит.

petav ★★★★★ ()

я б астериск подебажил на твоем месте, уверен - там есть много возможностей для дебага. ну а так, watchdog для того и создан.

Komintern ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.