This is the documentation page for an unsupported version of Zabbix.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.
Table of Contents

9 Command execution

Zabbix uses common functionality to execute user parameters, remote commands, system.run[] items without the "nowait" flag, scripts (alert, external and global) and some internal commands.

The command/script is executed similarly on both Unix and Windows platforms:

  1. Zabbix (the parent process) creates a pipe for communication
  2. Zabbix sets the pipe as the output for the to-be-created child process
  3. Zabbix creates the child process (runs the command/script)
  4. A new process group (in Unix) or a job (in Windows) is created for the child process
  5. Zabbix reads from the pipe until timeout occurs or no one is writing to the other end (ALL handles/file descriptors have been closed). Note that the child process can create more processes and exit before they exit or close the handle/file descriptor.
  6. If the timeout has not been reached, Zabbix waits until the initial child process exits or timeout occurs
  7. At this point it is assumed that everything is done and the whole process tree (i.e. the process group or the job) is terminated

Steps 5-7 do not refer to remote commands as they are executed with a "nowait" flag.

Zabbix assumes that a command/script has done processing when the initial child process has exited AND no other process is still keeping the output handle/file descriptor open. When processing is done, ALL created processes are terminated.

All double quotes and backslashes in the command are escaped with backslashes and the command is enclosed in double quotes.

Read more about user parameters, remote commands, alert scripts.