Выполнение программы/скрипта
Выполнение программы/скрипта осуществляет вызов исполняемого файла и возвращает его вывод из потоков stdout и stderr.
Настройка
В этом разделе перечислены настройки для всех подтипов программ/скриптов.
Подтип
Тип программы/скрипта.
Доступные типы:
-
Программа/скрипт в ФС,
-
Скрипт из репозитория,
-
Скрипт с указанным текстом.
| Подтип Скрипт с указанным текстом доступен только пользователям, у которых есть права на исполнение скриптов. Если же у пользователя нет таких прав, но скрипт был создан другим пользователем, то подтип будет доступен, а скрипт будет в режиме для чтения. |
Рабочая директория
Этот функционал требует SAYMON Agent v5.5.8 или выше. Агенты меньшей версии всегда будут использовать место установки агента (по умолчанию /opt/saymon-agent).
|
Рабочая директория выполнения скрипта.
Если рабочая директория не указана, то система использует место установки агента (по умолчанию /opt/saymon-agent).
Скрипт/Исполняемый файл
Выбор скрипта, который будет выполняться сенсором. Вид поля зависит от выбранного подтипа.
-
Для подтипа Программа/скрипт в ФС в поле Исполняемый файл указывается имя программы или путь к скрипту,
-
Для подтипа Скрипт из репозитория в поле Скрипт из выпадающего списка выбирается скрипт, заранее сохранённый в репозитории,
-
Для подтипа Скрипт с указанным текстом в поле Скрипт вводится текст скрипта с помощью редактора скриптов.
Аргументы
Аргументы, которые передаются в скрипт.
Если хотя бы один из передаваемых аргументов представляет собой строку с пробелами, то каждый аргумент необходимо указать в отдельном поле:
| В аргументах можно использовать переменные для передачи значений свойств в скрипт. |
Таймаут
Время, в течение которого агент будет ожидать результатов выполнения скрипта или программы с момента её запуска.
Значение таймаута по умолчанию – 30 секунд.
Если выполнение программы или скрипта занимает дольше, чем указанное время таймаута, то объект переходит в состояние WORKING, а проверка возвращает следующие данные:
Редактор скриптов
С помощью встроенного редактора скриптов пользовать может задавать скрипты для сенсора Выполнение программы/скрипта с подтипом Скрипт с указанным текстом. Редактор поддерживает подсветку кода.
| Кнопки управления редактором доступны только пользователям, у которых есть права на исполнение скриптов. Если у пользователя нет таких прав, то скрипт будет доступен только в режиме для чтения. |
С помощью кнопки можно добавить редактируемый скрипт в репозиторий. Кнопки и отменяют предыдущее действия и повторяют отменённое действие соответственно.
Примеры
Помимо обычных текстовых или числовых данных, из скрипта можно вернуть данные в формате 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
}
}
# !/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"}"
@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%"}