10 Выполнение команд
Zabbix использует единый функционал для выполнения внешних проверок, пользовательских параметров, элементов данных system.run, пользовательских скриптов оповещений, удаленных команд и пользовательских скриптов.
Команда/скрипт выполняется одинаково как на Unix, так и на Windows платформах:
- Zabbix (родительский процесс) создает канал связи
- Zabbix устанавливает этот канал связи для вывода данных от созданного дочернего процесса
- Zabbix создает дочерний процесс (выполняет команду/скрипт)
- Создается новая группа процесса (в Unix) или задача (в Windows) для дочернего процесса
- Zabbix считывает из канала данные по истечении установленного времени ожидания или до момента, когда запись прекратится (ВСЕ обработчики/файловые дескрипторы закрыты). Обратите внимание, что дочерний процесс может создать еще некоторое количество процессов и выйти до того, как эти процессы завершатся или будет закрыт обработчик/файловый дескриптор.
- Если установленное время ожидания не достигнуто, то Zabbix ждет завершения начального дочернего процесса или ждет достижения установленного времени ожидания.
- Если начальный дочерний процесс завершил свою работу и время ожидания не вышло, тогда Zabbix проверяет код вызода начального дочернего процесса и сравнивает его с 0 (ненулевое значение считается ошибкой выполнения, только для пользовательских скриптов оповещений, удаленных команд и пользовательских скриптов выполняемых на Zabbix сервере и Zabbix прокси)
- На этот момент подразумевается, что всё выполнено и всё дерево процессов (т.е. группа процессов или задача) завершены.
Zabbix предполагает, что команда/скрипт завершили обработку, в тот момент, когда завершился изначальный дочерний процесс И никакие другие процессы все еще не держат открытым обработчик/файловый дескриптор. Когда обработка завершена, ВСЕ созданные процессы завершаются.
Все двойные кавычки и обратная косая черта в команде экранируются обратной косой чертой и вся команда заключается в двойные кавычки.
Проверка кода выхода
Код выхода проверяется на соответствие следующим условиям:
*только для пользовательских скриптов оповещений, удаленных команд и пользовательских скриптов выполняемых на Zabbix сервере и Zabbix прокси.
*Любой код выхода, отличный от 0 считается ошибкой выполнения.
*Содержимое стандарного вывода ошибки и стандартного вывода собирается при ошибочных выполнениях и доступно в веб-интерфейсе (где отображается результат выполнения).
*Добавляется дополнительная запись в журнал для удаленных команд на Zabbix сервере, чтобы сохранить вывод выполнения скрипта, эту возможность можно включить, используя [[:ru/manual/appendix/config/zabbix_agentd|параметр]] агента LogRemoteCommands.
Возможные сообщения в веб-интерфейсе и записи в журналах при ошибочных командах/скриптах:
- Содержимое стандарного вывода ошибки и стандартного вывода при ошибочных выполнениях (если имеется).
- "Process exited with code: N." (при пустом выводе и коде выхода отлично от 0).
- "Process killed by signal: N." (при завершении процесса сигналом, только на Linux).
- "Process terminated unexpectedly." (при завершениях процесса по неизвестным причинам).
Подробнее о: