9 命令执行

Zabbix使用通用功能来实现外部检查、用户参数、 系统.run 监控项、自定义告警脚本、远程命令以及全局 脚本。

执行步骤

默认情况下,Zabbix中的所有脚本都使用sh shell执行, 且无法修改默认shell。要使用不同的shell, 可以采用变通方法:create一个脚本file并在命令执行期间调用该脚本。

命令/脚本在Unix和Windows平台上的执行方式类似:

  1. Zabbix(父进程)创建一个用于通信的管道

  2. Zabbix将管道设置为待创建子进程的输出

  3. Zabbix创建子进程(运行命令/脚本)

  4. 为子进程创建一个新的进程组(Unix)或作业(Windows)

  5. Zabbix从管道读取数据,直到超时发生或另一端无人写入 (所有句柄/file描述符已关闭)。 注意子进程可以create更多进程并在它们退出或关闭句柄/file描述符前先行退出。

  6. 如果未达到超时,Zabbix会等待初始子进程退出或超时发生

  7. 如果初始子进程已退出且未达到超时,Zabbix检查初始子进程的退出代码 并与0比较(非零值视为执行失败,仅适用于在Zabbix server和Zabbix proxy上执行的 自定义告警脚本、远程命令和用户脚本)

  8. 此时假定所有操作已完成且整个

    process tree (i.e. the process group or the job) is terminated

Zabbix假定当初始子进程已退出 且没有其他进程仍保持输出句柄/file描述符打开时,命令/脚本已完成 处理。当处理完成时,所有创建的进程都将被终止。

命令中的所有双引号和反斜杠都会用反斜杠转义, 且命令会被包裹在双引号中。

退出码检查

退出码通过以下条件进行检查:

  • 仅适用于自定义告警脚本、远程命令以及在Zabbix server和Zabbix proxy上执行的用户脚本

  • 任何非0的退出码均被视为执行失败

  • 失败执行的标准错误和标准输出内容会被收集并显示在前端(执行结果展示处)

  • 对于在Zabbix agent/proxy上执行的远程命令,可能会创建额外的日志条目

    by enabling the LogRemoteCommands parameter on agent/proxy.

失败命令/脚本可能产生的前端消息和日志条目:

  • 失败执行的标准错误和标准输出内容(如果有)
  • "进程退出代码: N." (当输出为空且退出码非0时)
  • "进程被信号终止: N." (当进程被信号终止时,仅限Linux系统)
  • "进程意外终止." (当进程因未知原因终止时)

另请参阅