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

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

В зависимости от подтипа проверки меняется следующее за ним поле.

Настройка

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

В качестве подтипа из выпадающего списка доступны варианты:

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

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

image
  • Скрипт из репозитария.

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

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

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

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

Для каждого подтипа скрипта возможно указать дополнительные Аргументы.

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

image

Таймаут

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

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

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

script timeout bug

Примеры

Помимо обычных текстовых или числовых данных, из скрипта можно вернуть данные в формате 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%"}