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

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

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

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

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

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

Zabbix считает, что команда/скрипт завершила обработку, когда исходный дочерний процесс завершился И ни один другой процесс больше не удерживает открытым дескриптор вывода handle/file descriptor. Когда обработка завершена, завершаются ВСЕ созданные процессы.

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

Проверка кода завершения

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

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

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

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

См. также