Автор Тема: выполнение части скрипта  (Прочитано 3585 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Vena

  • Собеседник
  • ****
  • Сообщений: 375
    • Просмотр профиля
выполнение части скрипта
« : Суббота, 21 Марта, 2015, 13:32:04 »
Вот часть скрипта, которая отправляет СМС на номер 792xxxxxxxx при выполнении условия.
deg=" deg, C"                                                                                                           
if let "$term_1<30"                                                                                                     
then `curl -d "text=Понижение температуры 1"  http://sms.ru/sms/send\?api_id=ezb17325-43az-ezz2-0522-1444f17d1471\&to=792xxxxxxxx`                                                                                                       
else echo 'good'                                                                                                       
fi                                                                                                                     
                                                                                                                       
deg=" deg, C"                                                                                                           
if let "$term_2>30"                                                                                                     
then `curl -d "text=Понвышение температуры 2"  http://sms.ru/sms/send\?api_id=ezb17325-43az-ezz2-0522-1444f17d1471\&to=792xxxxxxxx`                                                                                                     
else echo 'good'                                                                                                       
fi

Cron выполняет весь скрипт раз в 5 минут. Если условие выполнилось, то смс летит на указанный номер. Если условие через 5 минут не изменилось, то новая смс летит на номер. Нужно сделать, чтобы при выполнении условия смс повторилась через 20 минут например в случае, если условие еще выполняется. То есть если ситуация продолжается по условию, не заваливать смсками, а напоминать через 20 .
PS
Условий может быть больше.
« Последнее редактирование: Воскресенье, 22 Марта, 2015, 09:16:43 от vovka »

vovka

  • Global Moderator
  • Про
  • *****
  • Сообщений: 787
    • Просмотр профиля
    • www.nixzeya.ru.net
Re: выполнение части скрипта
« Ответ #1 : Воскресенье, 22 Марта, 2015, 09:16:13 »
Не всё так просто. Считаю программу уже сложной, поэтому и подход к реализации должен быть более серьёзным, а не просто копипаст из инета.

Дано:
  • значение температуры (целое)
  • допустимое значение нижней границы температуры (целое)
  • допустимое значение верхней границы температуры (целое)
  • запуск программы проверки раз в 5 минут

Исходя из топика, формулирую задачу:
Если значение температуры выходит за пределы допустимых значений, то в первый раз произвести SMS-уведомление, и если состояние сохраняется, то оповещать каждые 20 минут до тех пор, пока температура не войдёт в диапазон.

Считаю задачу не совсем корректной и вот по какой причине:
Если это не круглосуточное предприятие, и нет критической важности, предположим, что выход за пределы произошёл ночью, или, например, датчик неисправен, то зачем будить человека посреди ночи? Уведомление о выходе за пределы должно прийти максимум два раза (первый - на тот случай, если что не сработает), далее нужно уведомление о входе в норму. Больше ничего не нужно. Однако, возможна ситуация, что график температуры будет достаточно пологий на границе между допустимым значением и превышением. Тогда наблюдатель просто устанет от смс`ок. Этот вопрос должен быть продуман и реализован. Например, сделать возможность, чтобы наблюдатель вручную мог отключать оповещение - т.е. подтвердить получение сообщение.

Теперь конкретно по задаче топика. Диаграмы, поясняющие работу системы примерно будут такие:

[attach=1]

Здесь я, на будущее ввёл 3 типа СМС.

Алгоритм работы.

[attach=2]

Задача реализована на основе сохранения состояния счётчика "молчания" - если происходит выход за пределы, запускается смс-оповещение и происходит декремент счётчика. Однако последующие запуски производят только декремент, без отправки смс. Когда счётчик обнулился, снова происходит отправка, и счётчик взводится в количество 5-минутных интервалов и процесс повторяется.
Если всё приходит в норму, счётчик обнуляется принудительно.


Инициализация

[attach=3]

После включения системы и загрузки ОС, нужно создать фаловый раздел в памяти и примонтировать его как каталог, например в /tmpfs  . В этом каталоге создать файлы счётчиков и сразу поместить в них по нулю.
В процессе работы скрипта, он будет считывать из него значения и обновлять их. Раздел в памяти применён для сохранения ресурса накопителя.

Стоит также учитывать, что cron может запустить задание раньше, чем rc.local и не обнаружить файлов, поэтому процедура их создания также предусмотрена в алгоритме.

Вот, когда алгоритм проверен, отлажен и отработан на бумажке и в голове, можно взять клавиатуру в руки.  ;D
« Последнее редактирование: Воскресенье, 22 Марта, 2015, 09:18:59 от vovka »
*nix - свобода мысли, свобода творчества!