Zabbix Documentation 4.2

2.23.04.04.2 (current)In development:4.4 (devel)Unsupported:1.82.02.43.23.4

User Tools

Site Tools


Sidebar

ru:manual:appendix:command_execution

10 Выполнение команд

Zabbix использует единый функционал для выполнения внешних проверок, пользовательских параметров, элементов данных system.run, пользовательских скриптов оповещений, удаленных команд и пользовательских скриптов.

Команда/скрипт выполняется одинаково как на Unix, так и на Windows платформах:

  1. Zabbix (родительский процесс) создает канал связи
  2. Zabbix устанавливает этот канал связи для вывода данных от созданного дочернего процесса
  3. Zabbix создает дочерний процесс (выполняет команду/скрипт)
  4. Создается новая группа процесса (в Unix) или задача (в Windows) для дочернего процесса
  5. Zabbix считывает из канала данные по истечении установленного времени ожидания или до момента, когда запись прекратится (ВСЕ обработчики/файловые дескрипторы закрыты). Обратите внимание, что дочерний процесс может создать еще некоторое количество процессов и выйти до того, как эти процессы завершатся или будет закрыт обработчик/файловый дескриптор.
  6. Если установленное время ожидания не достигнуто, то Zabbix ждет завершения начального дочернего процесса или ждет достижения установленного времени ожидания.
  7. Если начальный дочерний процесс завершил свою работу и время ожидания не вышло, тогда Zabbix проверяет код вызода начального дочернего процесса и сравнивает его с 0 (ненулевое значение считается ошибкой выполнения, только для пользовательских скриптов оповещений, удаленных команд и пользовательских скриптов выполняемых на Zabbix сервере и Zabbix прокси)
  8. На этот момент подразумевается, что всё выполнено и всё дерево процессов (т.е. группа процессов или задача) завершены.
Zabbix предполагает, что команда/скрипт завершили обработку, в тот момент, когда завершился изначальный дочерний процесс И никакие другие процессы все еще не держат открытым обработчик/файловый дескриптор. Когда обработка завершена, ВСЕ созданные процессы завершаются.

Все двойные кавычки и обратная косая черта в команде экранируются обратной косой чертой и вся команда заключается в двойные кавычки.

Проверка кода выхода

Код выхода проверяется на соответствие следующим условиям:

  • только для пользовательских скриптов оповещений, удаленных команд и пользовательских скриптов выполняемых на Zabbix сервере и Zabbix прокси.
  • Любой код выхода, отличный от 0 считается ошибкой выполнения.
  • Содержимое стандарного вывода ошибки и стандартного вывода собирается при ошибочных выполнениях и доступно в веб-интерфейсе (где отображается результат выполнения).
  • Добавляется дополнительная запись в журнал для удаленных команд на Zabbix сервере, чтобы сохранить вывод выполнения скрипта, эту возможность можно включить, используя параметр агента LogRemoteCommands.

Возможные сообщения в веб-интерфейсе и записи в журналах при ошибочных командах/скриптах:

  • Содержимое стандарного вывода ошибки и стандартного вывода при ошибочных выполнениях (если имеется).
  • "Process exited with code: N." (при пустом выводе и коде выхода отлично от 0).
  • "Process killed by signal: N." (при завершении процесса сигналом, только на Linux).
  • "Process terminated unexpectedly." (при завершениях процесса по неизвестным причинам).

Подробнее о: