Ad Widget

Collapse

Скрипт для отправки sms

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • dimka779
    Junior Member
    • Mar 2014
    • 22

    #1

    Скрипт для отправки sms

    Нужно заставить zabbix отправлять СМС при срабатывании триггера.
    Стоит FreeBSD 8, Zabbix 1.8

    Пытаюсь это реализовать с помощью скрипта, который использует zabbix:

    /usr/local/etc/zabbix/externalscripts/sms_send.sh

    #!/bin/sh

    to=$1
    subject="$2"
    body="$3"
    sendsms $to "$subject" "$body"

    Проблема в том, что в /var/spool/sms/outgoing файл создается с владельцем zabbix:dialer и правами (read/write by owner) и не уходит на отправку.
    Если руками дать больше прав, или просто поменять владельца на uucp то сообщения сразу уходят.
    Как заставить скрипт создавать файл с владельцем uucp:dialer (при котором смс уходят)?

    Пользователя zabbix добавлял в группу uucp и dialer, рестартовал zabbix_server, но файл по прежнему создается zabbix:dialer

    inspection# pw groupmod uucp -m zabbix
    inspection# pw groupmod dialer -m zabbix
    inspection# pw groupshow dialer
    dialer:*:68:zabbix
    inspection# pw groupshow uucp
    uucp:*:66:zabbix
    inspection# rehash
    inspection# /usr/local/etc/rc.d/zabbix_server restart
    в файлике /usr/local/share/smstools/sendsms :
    smsd_user="uucp"
    файл smsd.conf:
    devices = huaweiE150
    loglevel = 7
    #loglevel 7 - максимальный вывод для отладки

    USER = uucp
    GROUP = dialer

    PIDFILE= /var/run/smsd/smsd.pid
    INFOFILE= /var/run/smsd/smsd.working
    outgoing = /var/spool/sms/outgoing
    checked = /var/spool/sms/checked
    incoming = /var/spool/sms/incoming
    failed = /var/spool/sms/failed
    sent = /var/spool/sms/sent
    autosplit=3

    [huaweiE150]
    device = /dev/cuaU4.0
    baudrate = 115200
    rtscts = no
    init = at+cpms="sm","sm",""
    incoming = yes
    incoming = high
    pin = 0000
    memory_start=0

    # cat /tmp/zabbix_server.log

    chown: /tmp/smsd_foCFRN: Operation not permitted
    mv: /var/spool/sms/outgoing/send_ZF3g6E: set owner/group (was: 122/0): Operation not permited
    Из под рута из командной строки смски нормально уходят.
    Наткнулся на предложение запускать скрипт через sudo от пользователя uucp, может как то по другому можно решить эту проблему? Спасибо!

    Еще один вопрос, немного по другой теме: как можно сделать отправку отчетов о доступности хостов в конкретное время по е-майлу (смс) ?
    Например, чтобы посылалось сообщение вида : "На 12 часов доступно 5 хостов/недоступно 10"
    Last edited by dimka779; 21-04-2014, 12:56.
  • yukra
    Senior Member
    • Apr 2013
    • 1359

    #2
    Originally posted by dimka779
    Еще один вопрос, немного по другой теме: как можно сделать отправку отчетов о доступности хостов в конкретное время по е-майлу (смс) ?
    Например, чтобы посылалось сообщение вида : "На 12 часов доступно 5 хостов/недоступно 10"
    Если именно отчет, то можно базу\api распарсить (сделать запрос и получить ответ).
    Если триггер по каждому хосту, то есть функции работы времени, пишите "Время больше 12 и время меньше 12.15 и хост недоступен".

    По первому вопросу: что за команда такая: sendsms? Почему вы с ней на форум заббикса пришли, а не на форум этого самого sendsms?

    Comment

    • dimka779
      Junior Member
      • Mar 2014
      • 22

      #3
      Originally posted by yukra
      Если именно отчет, то можно базу\api распарсить (сделать запрос и получить ответ).
      Если триггер по каждому хосту, то есть функции работы времени, пишите "Время больше 12 и время меньше 12.15 и хост недоступен".

      По первому вопросу: что за команда такая: sendsms? Почему вы с ней на форум заббикса пришли, а не на форум этого самого sendsms?
      А есть ли где то не очень сложный пример использования API в скриптах .sh ?
      Мне по сути надо только одно значение - число триггеров со статусом "проблема" и всё.

      По первому вопросу разобрался, осталось только достать значение из API и засунуть его в скрипт.

      Comment

      • yukra
        Senior Member
        • Apr 2013
        • 1359

        #4
        Originally posted by dimka779
        А есть ли где то не очень сложный пример использования API в скриптах .sh ?
        Мне по сути надо только одно значение - число триггеров со статусом "проблема" и всё.

        По первому вопросу разобрался, осталось только достать значение из API и засунуть его в скрипт.
        Вам принципиально через API? Если нет, то вот из базы:
        Code:
        mysql -u zabbix -pMegaPass zabbix -N -s -e 'select count(*) from triggers where value=1'

        Comment

        • dimka779
          Junior Member
          • Mar 2014
          • 22

          #5
          Originally posted by yukra
          Вам принципиально через API? Если нет, то вот из базы:
          Code:
          mysql -u zabbix -pMegaPass zabbix -N -s -e 'select count(*) from triggers where value=1'
          Спасибо! Проверил на сервере с Zabbix 2 - отдает нужное значение. (если 1 триггер с проблемой, то отдает значение 1, если 2 триггера - отдает значение 2)
          На другом сервере стоит Zabbix 1.8 - проверил там и почему то на нем показывает другие значения, не правильные.
          Т.е. если проблемных триггеров нет, то отдает значение 215
          Если появляется один проблемный триггер то отдается значение 216 и т.д.
          При этом в статусе заббикса :
          Количество триггеров (активированных/деактивированных)[проблема/неизвестно/ок] 25 18 / 7 [1 / 2 / 15]
          Что это может быть? Или как проверить...
          Просмотрел этот запрос через phpmyadmin - действительно 216 триггеров с value=1, но почему тогда они не видны на главной странице? Или в 1.8 как то по другому запрос должен быть?
          Last edited by dimka779; 22-04-2014, 13:39.

          Comment

          • yukra
            Senior Member
            • Apr 2013
            • 1359

            #6
            у меня 1,8 под руками нет, проверить не на чем, но думаю скорей всего что на 1,8 у вас часть триггером перешли в стостояния "сработал", после чего их например деактивировали. То есть они и сработали и деактивированы, поэтому не показываются в интерфейсе, но показываются в выборке. Гляньте на струкуру таблички, там вроде как есть поле enable или status и попробуйте его тоже задействовать.

            Comment

            • dimka779
              Junior Member
              • Mar 2014
              • 22

              #7
              Originally posted by yukra
              у меня 1,8 под руками нет, проверить не на чем, но думаю скорей всего что на 1,8 у вас часть триггером перешли в стостояния "сработал", после чего их например деактивировали. То есть они и сработали и деактивированы, поэтому не показываются в интерфейсе, но показываются в выборке. Гляньте на струкуру таблички, там вроде как есть поле enable или status и попробуйте его тоже задействовать.
              В таблице Triggers я не нашел отличий "действующих" триггеров от "сработанных"
              Там есть поле статус - но оно в обоих случаях равно 0.
              Вот список полей:
              triggerid
              expression
              description
              url
              status
              value
              priority
              lastchange
              dep_level
              comments
              error
              templateid
              type
              Может быть информация по триггерам хранится еще в какой то таблице?

              Comment

              • yukra
                Senior Member
                • Apr 2013
                • 1359

                #8
                Originally posted by dimka779
                В таблице Triggers я не нашел отличий "действующих" триггеров от "сработанных"
                Там есть поле статус - но оно в обоих случаях равно 0.
                Вот список полей:


                Может быть информация по триггерам хранится еще в какой то таблице?
                Предлагаете поиграть в экстрасенса?
                Создаю "тестовы" триггер который должен стать проблемным, жду пока сработает. Говорю:
                Code:
                mysql -u zabbix -pP@ss0rd zabbix  -e 'select * from triggers where value=1\G'
                Получаю ответ:
                Code:
                  triggerid: 13711
                 expression: {13328}=0
                description: Zabbix agent on {HOST.NAME} is unreachable for 5 minutes
                        url:
                     status: 0
                      value: 1
                   priority: 3
                 lastchange: 1398243810
                   comments:
                      error:
                 templateid: NULL
                       type: 0
                      state: 0
                      flags: 0
                Деактивирую его через веб-интерфейс, жду, вверх+Ентер:
                Code:
                  triggerid: 13711
                 expression: {13328}=0
                description: Zabbix agent on {HOST.NAME} is unreachable for 5 minutes
                        url:
                     status: 1
                      value: 1
                   priority: 3
                 lastchange: 1398243810
                   comments:
                      error:
                 templateid: NULL
                       type: 0
                      state: 0
                      flags: 0
                Как видите поле status ровно 0 если активирован, и 1 если нет.

                А еще я могу посмотерт глазами на триггер если перейду по ссылке адрес.фронтэнда/triggers.php?form=update&triggerid={triggerid_из_в ыдачи_mysql}
                Но опять же это все 2ой. Еще посмотрите поле "error". А лучше втупую сравните "видный в интерфейсе" триггер и ваш "невидимый".

                Comment

                Working...