Это перевод страницы документации с английского языка. Помогите нам сделать его лучше.

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

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

Шаги выполнения

По умолчанию все скрипты в Zabbix выполняются с использованием оболочки sh, и изменить оболочку по умолчанию невозможно. Чтобы использовать другую оболочку, можно воспользоваться обходным путем: создать файл скрипта и вызывать этот скрипт при выполнении команды.

Команда/скрипт выполняется аналогично как на платформах 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.

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

  • Содержимое стандартного потока ошибок и стандартного вывода для неудачных выполнений (если есть).
  • "Процесс завершился с кодом: N." (для пустого вывода и кода завершения, не равного 0).
  • "Процесс был завершен сигналом: N." (для процессов, завершенных сигналом, только на Linux).
  • "Процесс завершился неожиданно." (для процессов, завершенных по неизвестным причинам).

Смотрите также