как передать параметры скрипту, лежащему

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

    как передать параметры скрипту, лежащему

    Добрый день.

    Есть скрипт, отправляющий смски, лежит в alertscripts. Для отправки разных сообщений на разные адреса хотелось бы уметь передавать ему параметры. Но не пойму где. В Administration->Media types->SMS я могу только обозначить Имя типа медиа (SMS), тип (скрипт) и имя скрипта (sms.sh).
    Каким образом передать параметры - не пойму.

    Заранее спасибо всем.

    #2
    Originally posted by shura614 View Post
    Добрый день.

    Есть скрипт, отправляющий смски, лежит в alertscripts. Для отправки разных сообщений на разные адреса хотелось бы уметь передавать ему параметры. Но не пойму где. В Administration->Media types->SMS я могу только обозначить Имя типа медиа (SMS), тип (скрипт) и имя скрипта (sms.sh).
    Каким образом передать параметры - не пойму.

    Заранее спасибо всем.
    Используйте поле "Имя скрипта". Например sms.sh $1 $2

    Comment


      #3
      Так-то оно так, а где сами параметры определить? Внутри скрипта, положим я пишу что-то типа
      phone=$1
      message=$2
      А где в заббихе я определю значения параметров?

      Comment


        #4
        Значения параметров фиксированы:

        Когда скрипт оповещения выполняется ему передается через командную строку 3 ($1, $2 и $3 соответственно):

        Кому
        Тема
        Сообщение

        https://www.zabbix.com/documentation...s/media/script

        Comment


          #5
          Про $1 $2 и прочее в самом скрипте, безусловно, понятно. А вот как передать например номер телефона администратора, который лежит в Administration->Users->Media->SMS в этот самый $1? а также например имя триггера, который активизировал посылку сообщения в например $2?

          Comment


            #6
            В Administration->Users->Media->SMS есть поле "Send to". Его содержимое и должно попасть в $1.

            Configuration->Action-> <action_name>. Там два поля "Default subject" и "Default message". Они станут, соответственно, $2 и $3 (только макросы заполнятся значениями).

            Если хочется передать чего-то дополнительное, то можно в $3 писать это в отдельных строчках, отмечая каким-то префиксом и потом в скрипте выделять из текста.

            Comment


              #7
              Скрипт sms.sh лежит у меня в /usr/share/zabbix/alertscripts. Права все и всяческие есть, на пользователя zabbix. Тем не менее в Administration->Audit->Actions он пишет про смс вот что:
              /usr/share/zabbix/alertscripts/sms2.sh $1 $2 $3: [2] No such file or directory
              Хотя скрипт есть, права есть, и из-под пользователя zabbix он отлично запускается.
              Если же в Configuration->Actions->Operations в Operation Type вместо Send Message выбрать Remote Command и Сustom script, и вставить /usr/share/zabbix/alertscripts/sms.sh, то скрипт выполняется. Если написать в качестве параметров телефон и текст сообщения as is - все получается хорошо. Если в этом случае подставить $1 $2 $3 - параметры не передаются.
              Вот такое положение вещей, если можно - поясните, что у меня еще неправильно...

              Comment


                #8
                Есть вот какой чудесный момент:
                В Remote command из Configuration->Actions->Operations указывается полный путь до исполняемого скрипта.
                А в Administration -> Media types указывается только само называние скрипта (т.е. например, sms.sh), а путь к нему берется из конфига заббикса - из AlertScriptsPath.

                Возможно, дело в этом. Догадатся об этом можно только поставив 4 уровень логгинга и посмотрев в лог файле что происходит.

                AlertScriptsPath по умолчанию равер ${datadir}/zabbix/alertscripts, ${datadir} задается где-то при компиляции. При сборке из сорцов он у меня получился /usr/local/share/zabbix/alertscripts, при инсталляции из пакетов будет что-то другое.

                Comment


                  #9
                  Да все дело-то в том, что скрипт у меня лежит в точности по тому пути, который сервер указывает, как недоступный!
                  Поставил я дебаг левел=4, он мне ту же самую ошибку и нарисовал:

                  58622:20140811:154124.870 query [txnlev:0] [update alerts set status=2,retries=3,error='/usr/share/zabbix/alertscripts/sms.sh $1 $2 $3: [2] No such file or directory' where alertid=259]

                  А скрипт-то лежит ровнехонько по правильному адресу:

                  [[email protected] alertscripts]# ll /usr/share/zabbix/alertscripts/sms.sh
                  -rwxrwxrwx 1 zabbix zabbix 340 Aug 11 12:49 /usr/share/zabbix/alertscripts/sms.sh
                  со всеми какими только можно правами, вот какая загогулина

                  Comment


                    #10
                    А в Administration --> Media types в поле Script name у вас что написано
                    sms.sh $1 $2 $3
                    или
                    sms.sh

                    Comment


                      #11
                      Там написано sms.sh $1 $2 $3

                      Comment


                        #12
                        Попробуйте просто
                        sms.sh

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

                        Comment


                          #13
                          Ура! Все ОК, огромное спасибо! Удачи Вам во всем!

                          Comment


                            #14
                            Добавлю сюда еще вопрос - почему в скрипт, отправляющий смс, передаются только первые слова из дефолтных значений Subject и Message. В почту все уходит целиком, а в смс - из subj только статус триггера (ОК или Problem), а в message - слово Zabbix (Первое слово из имени триггера, Zabbix agent blah blah blah)

                            Comment


                              #15
                              Скрипт - отправляющий смс - это вы создали Media type и указали там Type - Script?
                              Если так, то проверяйте, как ваш скрипт обрабатывает пробелы и переводы строки в получаемых параметрах.

                              Вот для тестовый скрипт для проверки:
                              Code:
                              #!/bin/bash
                              LOG="/tmp/test.log"
                              echo ----------------------- >> $LOG
                              date >> $LOG
                              echo '$1=' >> $LOG
                              echo "$1" >> $LOG
                              echo '$2=' >> $LOG
                              echo "$2" >> $LOG
                              echo '$3=' >> $LOG
                              echo "$3" >> $LOG

                              Comment

                              Announcement

                              Collapse
                              No announcement yet.
                              Working...
                              X