Выполнение программы/скрипта

Выполнение программы/скрипта осуществляет вызов исполняемого файла и возвращает его вывод из потоков stdout и stderr.

Настройка

В этом разделе перечислены настройки для всех подтипов программ/скриптов.

parameters light
Пример настроек сенсора с подтипом "Программа\скрипт в ФС"
parameters dark
Пример настроек сенсора с подтипом "Программа\скрипт в ФС"

Подтип

Тип программы/скрипта.

Доступные типы:

  • Программа/скрипт в ФС,

  • Скрипт из репозитория,

  • Скрипт с указанным текстом.

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

Рабочая директория

Этот функционал требует SAYMON Agent v5.5.8 или выше. Агенты меньшей версии всегда будут использовать место установки агента (по умолчанию /opt/saymon-agent).

Рабочая директория выполнения скрипта.

Если рабочая директория не указана, то система использует место установки агента (по умолчанию /opt/saymon-agent).

Скрипт/Исполняемый файл

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

  • Для подтипа Программа/скрипт в ФС в поле Исполняемый файл указывается имя программы или путь к скрипту,

  • Для подтипа Скрипт из репозитория в поле Скрипт из выпадающего списка выбирается скрипт, заранее сохранённый в репозитории,

  • Для подтипа Скрипт с указанным текстом в поле Скрипт вводится текст скрипта с помощью редактора скриптов.

Аргументы

Аргументы, которые передаются в скрипт.

Если хотя бы один из передаваемых аргументов представляет собой строку с пробелами, то каждый аргумент необходимо указать в отдельном поле:

arguments light
arguments dark
В аргументах можно использовать переменные для передачи значений свойств в скрипт.

Таймаут

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

Значение таймаута по умолчанию – 30 секунд.

Если выполнение программы или скрипта занимает дольше, чем указанное время таймаута, то объект переходит в состояние WORKING, а проверка возвращает следующие данные:

script timeout bug light
script timeout bug dark

Редактор скриптов

С помощью встроенного редактора скриптов пользовать может задавать скрипты для сенсора Выполнение программы/скрипта с подтипом Скрипт с указанным текстом. Редактор поддерживает подсветку кода.

editor light
editor dark
Кнопки управления редактором доступны только пользователям, у которых есть права на исполнение скриптов. Если у пользователя нет таких прав, то скрипт будет доступен только в режиме для чтения.

С помощью кнопки Добавить в репозиторий можно добавить редактируемый скрипт в репозиторий. Кнопки и отменяют предыдущее действия и повторяют отменённое действие соответственно.

Примеры

Помимо обычных текстовых или числовых данных, из скрипта можно вернуть данные в формате JSON, например:

{"cpu": "10", "mem": "20"}

В этом случае данные будут распознаны и распределены в таблицу данных по столбцам cpu и mem со значениями 10 и 20 соответственно:

cpu mem

10

20

Для вывода многострочной таблицы скрипт должен возвращать данные в ином формате:

{
  "host1": {
    "cpu": "10",
    "mem": "20"
  },
  "host2": {
    "cpu": "30",
    "mem": "40"
  }
}

В этом случае данные будут распознаны и распределены в таблицу данных по столбцам "host1.cpu", "host1.mem", "host2.cpu" и "host2.mem":

host1.cpu host1.mem host2.cpu host2.mem

10

20

30

40

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

cpu mem

10

20

30

40

Для наглядности можно добавить дополнительный признак host в возвращаемые данные:

{
  "host1": {
    "host": "1",
    "cpu": "10",
    "mem": "20"
  },
  "host2": {
    "host": "2",
    "cpu": "30",
    "mem": "40"
  }
}

Получится таблица:

host cpu mem

1

10

20

2

30

40

Ещё один хороший пример:

  {
    "MEM": {
      "memoryType": "MEM",
      "bytesTotal": 4130643968,
      "bytesUsed": 3002249216,
      "bytesAvailable": 1128394752,
      "percentUsed": 72.68235266119164
    },
    "SWAP": {
      "memoryType": "SWAP",
      "bytesTotal": 536866816,
      "bytesUsed": 469790720,
      "bytesAvailable": 67076096,
      "percentUsed": 87.50600819403225
    },
    "TOTAL": {
      "memoryType": "TOTAL",
      "bytesTotal": 4667510784,
      "bytesUsed": 3472039936,
      "bytesAvailable": 1195470848,
      "percentUsed": 74.38740040841435
    }
  }
Примеры скриптов для *nix:
# !/bin/sh
 # Пример с выводом в stdout
 # Поиск запущенного скрипта TEST.sh
 echo `ps -ef | grep "TEST.sh" | grep -v grep | wc -l`

#!/bin/sh
 # Пример с выводом в stdout в формате JSON
 # Поиск запущенного скрипта TEST.sh
 TEST=$( ps -ef | grep "TEST.sh" | grep -v grep | wc -l )
 echo "{"TEST":"$TEST"}"
Примеры скриптов для Windows:
@echo off
 REM Пример с выводом в stdout
 REM Поиск службы RDP
 for /F "tokens=*" %%i in ('tasklist.exe  /svc ^| find /c "TermService"') do set TERMSRV=%%i
 echo %TERMSRV%
@echo off
 REM Пример с выводом в stdout в JSON формате
 REM Поиск службы RDP и запущенного командного файла test.cmd
 for /F "tokens=*" %%i in ('tasklist.exe  /svc ^| find /c "TermService"') do set TERMSRV=%%i
 for /F "tokens=*" %%i in ('tasklist.exe  /v ^| find /c "test.cmd"') do set TEST=%%i
 echo {"TERMSRV":"%TERMSRV%","TEST":"%TEST%"}