Задача: Ежеминутный мониторинг состояния службы и транков.[]
Для этого, создадим скрипт:
nano /etc/aster_check
Содержание:
#!/bin/bash MinTrunk=21 #Минимальное количество зарегистрированных транков. log="/var/log/aster_check.log" #Путь к log файлу. asterisk="/usr/sbin/asterisk" #Путь к файлу обработчика Asterisk. service="/etc/init.d/asterisk" #Путь к службе Asterisk # Проверяем, запущена ли служба Asterisk, если не запущена, запускаем. ServWork=`$asterisk -rx 'sip show registry' | grep -i "Unable to connect" | wc -l` if [ $ServWork -eq "1" ]; then echo "Запуск службы Asterisk" >>$log $service start fi #Проверяем количество зарегистрированных транков. CurKolTrunk=`$asterisk -rx 'sip show registry' | grep -i "register" | wc -l` #Сверяем количество зарегистрированных транков, если значение меньше минимального, перезапускаем SIP транки. if [ $CurKolTrunk -lt $MinTrunk ]; then echo "Количество зарегистрированных транков: $CurKolTrunk" >> $log echo "`date` Перезапуск SIP транков." >> $log $asterisk -rx 'sip reload' fi exit
Закрываем и сохраняем все Ctrl + X.
После чего, необходимо сделать его исполняемым.
chmod +x /etc/aster_check
Добавим скрипт в crontab для ежеминутного запуска скрипта.
crontab -e
В конце добавляем:
* * * * * /etc/aster_check
По умолчанию, настройки кронтаба запускают скрипт каждую минуту.
Если необходимо запускать скрипт чаще чем 1 минуту.[]
По скольку Crontab не умеет запусть файлы чаще чем 1 минуту, то видоизменим скрипт и добавим цикл for. Цикл For не очень удобен для больших шагов, но для нашей задачи и с целью минимизирования скрипта подходит лучше всего.
#!/bin/bash MinTrunk=21 #Минимальное количество зарегистрированных транков log="/var/log/aster_check.log" #Путь к log файлу asterisk="/usr/sbin/asterisk" #Путь к файлу обработчика Asterisk sleep="/bin/sleep" #Путь к файлу обработчика команды sleep service="/etc/init.d/asterisk" #Путь к службе Asterisk for step in 1 2 3 4 5 6 do # Проверяем, запущена ли служба Asterisk, если не запущена, запускаем. ServWork=`$asterisk -rx 'sip show registry' | grep -i "Unable to connect" | wc -l` if [ $ServWork -eq "1" ]; then echo "Запуск службы Asterisk" >>$log $service start fi #Проверяем количество зарегистрированных транков, если значение меньше определенного, переподключаем транки. CurKolTrunk=`$asterisk -rx 'sip show registry' | grep -i "register" | wc -l` if [ $CurKolTrunk -lt $MinTrunk ]; then echo "Количество зарегистрированных транков: $CurKolTrunk" >> $log echo "`date` Перезапуск SIP транков." >> $log $asterisk -rx 'sip reload' fi $sleep 10 done exit