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

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

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

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

Настройка ​

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

parameters light

parameters dark

Подтип ​

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

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

  • Программа/скрипт в ФС,
  • Скрипт из репозитория,
  • Скрипт с указанным текстом.

NOTE

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

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

NOTE

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

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

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

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

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

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

Аргументы ​

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

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

arguments light

arguments dark

NOTE

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

Таймаут ​

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

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

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

script timeout bug light

script timeout bug dark

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

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

editor light

editor dark

NOTE

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

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

Примеры ​

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

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

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

cpumem
1020

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

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

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

host1.cpuhost1.memhost2.cpuhost2.mem
10203040

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

cpumem
1020
3040

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

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

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

hostcpumem
11020
23040

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

json
  {
    "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
    }
  }
shell
# !/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"}"
shell
@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%"}