LINUX.ORG.RU
ФорумAdmin

Правельно написать скрипт


2

1

Доброе время суток есть скрипт который выполняется раз в 5 мин

cat /opt/iax2.sh
#!/bin/sh
status=$(/usr/sbin/asterisk -rx "iax2 show registry" | grep "NN" | grep -c "Registered")
dat=`date +%H-%M...%d-%m-%Y`
if [ $status = "0" ]; then
curl -d "text=Пропал конект с НН в $dat " http://некий запрос
fi
все хорошо работает нооо Если канал не подымается в течение часа то сами понимаете что каждые 5 мин мне будет приходить уведомление что пропал канал (( а это карауул скока сообщений Вопрос как сделать так, чтоб например как тока 5раз подряд он сказал что пропал конект то на 6 раз не присылал сообщения до тех пор пока канал не восстановится,а как восстановится опять выполнить некий запрос,и сбросить счетчик и все опять по кругу.


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

UPD: Ещё логи писать можно и потом перед отправкой очередного сообщения проверять.

drake
()
Последнее исправление: drake (всего исправлений: 1)

Пишите в какой-либо файл информацию о том доступен какой-либо адрес или нет. А затем в скрипте проверяйте доступность адреса и информацию в файле. Если адрес недоступен и в файле так же уже указано, что адрес недоступен, то сообщение отправлять не надо. Если адрес стал доступен, то выведите в файл информацию о том, что адрес стал доступен. Если адрес стал недоступен, а в файле указано, что он доступен, то отправьте сообщение и выведите в файл информацию о том, что адрес недоступен.

kostik87 ★★★★★
()

Счетчик ты можешь писать в файл, потом читать его каждую итерацию и проверять, если он есть, то не отправлять. Это обычный IF-ELSE

minakov ★★★★★
()
Ответ на: комментарий от minakov

Плюсую счётчик, самый очевидный и простой вариант.

avolon:

Было бы здорово научиться сначала правильно писать слово

Правельно

sT331h0rs3 ★★★★★
()

запустить один раз, в скрипте цикл со слипом и счётчик, что-то типа этого:

#!/bin/sh
count=0
while sleep 300;do
    status="$(/usr/sbin/asterisk -rx "iax2 show registry" | grep "NN" | grep -c "Registered")"
    dat=`date +%H-%M...%d-%m-%Y`
    if [[ ${status} == "0" ]]; then
        ((count++))
        if [[ "${count}" -lt "6" ]];then
            curl -d "text=Пропал конект с НН в ${dat} " http://некий запрос
        else
            continue
        fi
    else
        count=0
    fi
done

megabaks ★★★★
()
Последнее исправление: megabaks (всего исправлений: 1)
Ответ на: Правельно от Turbid

Те, остальное в его посте тебя устраивает?

anonymous
()

Я бы оставил скрипт как есть, простым насколько возможно, а всю логику реализовал там, куда уходит запрос curl. Держать сервис и его мониториг на одном хосте - это моветон.

Yur4eg ★★
()
Ответ на: комментарий от Yur4eg

Я бы оставил скрипт как есть, простым насколько возможно, а всю логику реализовал там, куда уходит запрос curl.

Придерживаюсь. Раз есть такая строчка:

curl -d «text=Пропал конект с НН в $dat » http://некий запрос

то это можно и даже нужно автоматизировать именно на принимающей данные стороне.

В противном случае

  • в файле, счетчик накручивать при failed;
  • каждый раз проверять при отправке кол-во;
  • при passed файл со счетчиком удалять.
petav ★★★★★
()
Ответ на: комментарий от Yur4eg

а всю логику реализовал там, куда уходит запрос curl.

особенно, если это запрос (стороннему) сервису отправки смс, ага...

aol ★★★★★
()
Ответ на: комментарий от aol

особенно, если это запрос (стороннему) сервису отправки смс, ага...

И я не подумал про это

petav ★★★★★
()
Ответ на: комментарий от aol

собенно, если это запрос (стороннему) сервису отправки смс, ага...

ну тогда через лок-файл.

#!/bin/sh
status=$(/usr/sbin/asterisk -rx "iax2 show registry" | grep "NN" | grep -c "Registered")
dat=`date +%H-%M...%d-%m-%Y`
if [ $status -eq 0 ]; then
  if [ ! -f /var/lock/iax_status_fail ]; then
    curl -d "text=Пропал конект с НН в $dat " http://некий запрос
    touch /var/lock/iax_status_fail
  fi
elif [ -f /var/lock/iax_status_fail ]; then
 # канал поднялся, удаляем
 rm /var/lock/iax_status_fail
fi

В крон еще добавить, чтобы при перезагрузке удалял лок-файл, а то может не сработать

@reboot rm /var/lock/iax_status_fail

Yur4eg ★★
()
Ответ на: комментарий от Yur4eg

Спасибо добрые люди! Сейчас попробую с демонами поиграться Забыл сказать «некий запрос» то сервис который смс шлет ( Так что каждые 5 мин получать смс когда каналл лежит ,тож мало приятного.

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