Ad Widget

Collapse

Скрипт уровня сигнала модема

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #16
    Originally posted by bboymig
    Можно ли данный скрипт немного улучшить? Если даннная строчка возвращает 0, то требуется еще раз повторить скрипт. Если по истечении 5 попыток вернулся 0, то отправить 0.
    Понимаю, что требуется цикл сделать, но я синтаксис не знаю.
    На почту в сутки могут упасть около 100 сообщений, хотя стоит триггер на 5 минут, а значение он отсылает сразу:
    Сделайте в экшне отправку сообщения на шаге n, где n * время шага эскалации перекрывает 5 минут. В этом случае сообщение не будет отослано, если в этот период всё вернется в норму (триггер будет снят).

    Comment

    • bboymig
      Member
      • Aug 2016
      • 30

      #17
      Задача решилась:
      #!/bin/bash
      for in in 1 2 3 4 5 #5 циклов
      do
      echo -e "at+csq\r\n" > /dev/ttyusb0
      sleep 1
      temp=`gawk '/^+csq/{print gensub(/,.*/,"","g",$2)*2-113;rc=-1;exit} end {exit rc+1}' /dev/ttyusb0 || echo 0`
      if [ "$temp" -ne "0" ]
      then
      echo $temp
      break #прерываем цикл
      fi
      done

      Comment

      • yukra
        Senior Member
        • Apr 2013
        • 1359

        #18
        Originally posted by bboymig
        Задача решилась:
        по моему неправильно.

        Этот скрипт вполне может показать что-то типа
        Code:
        0
        0
        5
        а заббиксу это врятли понравится

        Comment

        • bboymig
          Member
          • Aug 2016
          • 30

          #19
          Он не будет выводить 0.
          Здесь есть условие.
          if [ "$temp" -ne "0" ]
          Т.е. За эти 5 попыток, если он не смог получить значение, информация не выводится вовсе.

          Comment

          • bboymig
            Member
            • Aug 2016
            • 30

            #20
            Originally posted by bboymig
            Он не будет выводить 0.
            Здесь есть условие.

            Т.е. За эти 5 попыток, если он не смог получить значение, информация не выводится вовсе.
            Хм... Теперь zabbix выдает ошибку.
            Timeout while executing a shell script.
            Я думал, zabbix забирает значение тогда, когда выполнится скрипт.

            Comment

            • yukra
              Senior Member
              • Apr 2013
              • 1359

              #21
              Originally posted by bboymig
              Он не будет выводить 0.
              Здесь есть условие.

              Т.е. За эти 5 попыток, если он не смог получить значение, информация не выводится вовсе.
              Действительно, не досмотрел с утра всю логику.

              Originally posted by bboymig
              Хм... Теперь zabbix выдает ошибку.
              Я думал, zabbix забирает значение тогда, когда выполнится скрипт.
              Параметр Timeout в конфиге сервера и агентов увеличьте

              Comment

              • bboymig
                Member
                • Aug 2016
                • 30

                #22
                Не работает все же данный скрипт как следует. И я не могу понять в чем причина. Сам модем работает. Здесь с командой Sleep игрался. И 2 ставил и 0.5. То выдает информацию, то нет.
                И даже так делал:
                #!/bin/bash
                for in in 1 2 3 4 5 #5 циклов
                do
                echo -e "AT+CSQ\r\n" > /dev/ttyUSB0
                sleep 0.2
                echo -e "AT+CSQ\r\n" > /dev/ttyUSB0
                sleep 0.2
                echo -e "AT+CSQ\r\n" > /dev/ttyUSB0
                sleep 1.0
                echo -e "AT+CSQ\r\n" > /dev/ttyUSB0
                temp=`gawk '/^+CSQ/{print gensub(/,.*/,"","g",$2)*2-113;RC=-1;exit} END {exit RC+1}' /dev/ttyUSB0 || echo 0`
                if [ "$temp" -ne "0" ]
                then
                echo $temp
                break #прерываем цикл
                fi
                done
                Интересно, что этот вариант работает стабильнее других. И надо бы сделать на выходе, если не получили информацию, то выводим 0.
                Оптимально бы сделать проверку сразу при сборе информации. Есть ли данные на dev/ttyUSB0. Если есть, то забираем. Если нет, то повторяем команду echo -e "AT+CSQ\r\n" > /dev/ttyUSB0 .
                Last edited by bboymig; 09-09-2016, 14:24.

                Comment

                • bboymig
                  Member
                  • Aug 2016
                  • 30

                  #23
                  Сделал немного по другому. Иногда по непонтным причинам при выполнении команды строчка:
                  temp=`gawk '/^+CSQ/{print gensub(/,.*/,"","g",$2)*2-113;RC=-1;exit} END {exit RC+1}' /dev/ttyUSB0 || echo 0`
                  зависала.

                  Сделал так:

                  #!/bin/bash
                  echo > gsm.txt
                  while true
                  do
                  sleep 0.5
                  cat /dev/ttyUSB0 >> gsm.txt
                  done &
                  temp="0";
                  i="0";
                  for i in {1..3}; do
                  if [ $i -eq 3 ]; then
                  echo $temp;
                  break
                  fi
                  if [ $i -lt 3 ]; then
                  echo -e "AT+CSQ\r\n" > /dev/ttyUSB0
                  temp=`gawk '/^+CSQ/{print gensub(/,.*/,"","g",$2)*2-113;RC=-1;exit} END {exit RC+1}' gsm.txt || echo 0`
                  if [ "$temp" -ne "0" ]
                  then
                  clear;
                  echo $temp
                  break #прерываем цикл
                  fi
                  fi
                  done
                  Сейчас проблем нет, и можно отследить, какое значение выдает модем. Скрипт данные отображает прекрасно, а вот по каким то причинам информация на zabbix не поступает.

                  zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t GSM
                  GSM [t|-87]
                  Last edited by bboymig; 11-09-2016, 08:19.

                  Comment

                  • bboymig
                    Member
                    • Aug 2016
                    • 30

                    #24
                    Права

                    Переделали скрипт. Данный скрипт не глючит и хорошо работает, но
                    #!/bin/bash
                    echo > gsm.txt
                    temp="0";
                    i="0";
                    for i in {1..5}; do
                    if [ $i -lt 5 ]; then
                    echo -e "AT+CSQ\r\n" > /dev/ttyUSB0
                    tail -f /dev/ttyUSB0 >> gsm.txt &
                    mypid=`echo $!`
                    temp=`gawk '/^+CSQ/{print gensub(/,.*/,"","g",$2)*2-113;RC=-1;exit} END {exit RC+1}' gsm.txt || echo 0`
                    if [ "$temp" -ne "0" ]
                    then
                    echo $temp
                    kill $mypid
                    break #прерываем цикл
                    fi
                    if [ $i -eq 5 ]; then
                    echo $temp;
                    kill $mypid
                    break
                    fi
                    fi
                    done
                    Zabbix выдает следующее:

                    Received value [/etc/zabbix/alertscripts/gsm.sh: line 2: gsm.txt: Отказано в доступе/etc/zabbix/alertscripts/gsm.sh: line 13: gsm.txt: Отказано в доступеgawk: fatal: cannot open file `gsm.txt' for reading (Нет такого файла или каталога)/etc/zabbix/alertscripts/gsm.sh: line 13: gsm.txt: Отказано в доступеgawk: fatal: cannot open file `gsm.txt' for reading (Нет такого файла или каталога)/etc/zabbix/alertscripts/gsm.sh: line 13: gsm.txt: Отказано в доступеgawk: fatal: cannot open file `gsm.txt' for reading (Нет такого файла или каталога)/etc/zabbix/alertscripts/gsm.sh: line 13: gsm.txt: Отказано в доступеgawk: fatal: cannot open file `gsm.txt' for reading (Нет такого файла или каталога)0/etc/zabbix/alertscripts/gsm.sh: line 8: kill: (11361) - Нет такого процесса] is not suitable for value type [Numeric (float)]
                    Права на папку есть.

                    drwxr-xr-x 2 zabbix zabbix 4096 сен 12 15:13 alertscripts
                    -rwxrwxrwx 1 zabbix zabbix 541 сен 12 15:04 gsm.sh
                    Last edited by bboymig; 12-09-2016, 13:18.

                    Comment

                    • sadman
                      Senior Member
                      • Dec 2010
                      • 1611

                      #25
                      Originally posted by bboymig
                      Переделали скрипт. Данный скрипт не глючит и хорошо работает, но


                      Zabbix выдает следующее:


                      Права на папку есть.
                      Code:
                      su zabbix
                      pwd
                      ls -la

                      Comment

                      • Kos
                        Senior Member
                        Zabbix Certified SpecialistZabbix Certified Professional
                        • Aug 2015
                        • 3406

                        #26
                        У Вас в скрипте не указаны пути к файлу gsm.txt, поэтому он будет создаваться в текущей директории для программы. В свою очередь, Вы не знаете, какая именно директория является текущей (совсем не обязательно, что та, где находится сам скрипт).

                        Тут надо либо указывать полный путь к временному файлу (скажем, /tmp/gsm.txt), либо делать явно нужную директорию текущей в самом скрипте (cd /tmp одной из первых строк, ещё до "echo > gsm.txt").

                        Comment

                        • bboymig
                          Member
                          • Aug 2016
                          • 30

                          #27
                          pwd
                          /etc/zabbix/alertscripts
                          ls -la
                          drwxrwxrwx 2 zabbix zabbix 4096 сен 12 16:50 .
                          drwxrwxrwx 5 zabbix zabbix 4096 сен 10 14:07 ..
                          -rwxrwxrwx 1 zabbix zabbix 350 июл 25 16:45 email.sh
                          -rwxrwxrwx 1 zabbix zabbix 645 сен 12 16:50 gsm.sh
                          -rwxrwxrwx 1 zabbix zabbix 364 июл 25 13:55 sendemail.sh
                          -rwxrwxrwx 1 zabbix zabbix 124 авг 15 08:39 sms.sh
                          -rwxrwxrwx 1 zabbix zabbix 1229 сен 7 10:33 upsd.crt
                          -rwxrwxrwx 1 zabbix zabbix 1704 сен 7 10:33 upsd.key
                          -rwxrwxrwx 1 zabbix zabbix 61 сен 6 15:54 UPSEN.sh
                          -rwxrwxrwx 1 zabbix zabbix 1338 сен 7 09:47 ups_status.sh
                          -rwxrwxrwx 1 zabbix zabbix 707 авг 15 10:54 ussd.sh
                          #!/bin/bash
                          cd /etc/zabbix/alertscripts/
                          echo > /etc/zabbix/alertscripts/gsm.txt
                          temp="0";
                          i="0";
                          for i in {1..5}; do
                          if [ $i -lt 5 ]; then
                          echo -e "AT+CSQ\r\n" > /dev/ttyUSB0
                          tail -f /dev/ttyUSB0 >> /etc/zabbix/alertscripts/gsm.txt &
                          mypid=`echo $!`
                          temp=`gawk '/^+CSQ/{print gensub(/,.*/,"","g",$2)*2-113;RC=-1;exit} END {exit RC+1}' /etc/zabbix/alertscripts/gsm.txt || echo 0`
                          if [ "$temp" -ne "0" ]
                          then
                          echo $temp
                          kill $mypid
                          break #прерываем цикл
                          fi
                          if [ $i -eq 5 ]; then
                          echo $temp;
                          kill $mypid
                          break
                          fi
                          fi
                          done
                          Ошибка
                          Received value [/etc/zabbix/alertscripts/gsm.sh: line 2: gsm.txt: Отказано в доступе/etc/zabbix/alertscripts/gsm.sh: line 8: gsm.txt: Отказано в доступеgawk: fatal: cannot open file `gsm.txt' for reading (Нет такого файла или каталога)/etc/zabbix/alertscripts/gsm.sh: line 8: gsm.txt: Отказано в доступеgawk: fatal: cannot open file `gsm.txt' for reading (Нет такого файла или каталога)/etc/zabbix/alertscripts/gsm.sh: line 8: gsm.txt: Отказано в доступеgawk: fatal: cannot open file `gsm.txt' for reading (Нет такого файла или каталога)/etc/zabbix/alertscripts/gsm.sh: line 8: gsm.txt: Отказано в доступеgawk: fatal: cannot open file `gsm.txt' for reading (Нет такого файла или каталога)] is not suitable for value type [Numeric (float)]

                          Comment

                          • bboymig
                            Member
                            • Aug 2016
                            • 30

                            #28
                            cd /etc/zabbix/alertscripts/
                            После данной строчки все запустилось.
                            Спасибо большое всем за проявленное терпение и поддержку. Надеюсь данный пост кому либо поможет решить аналогичные задачи!

                            Comment

                            Working...