2022 Zabbix中国峰会
2022 Zabbix中国峰会

8 执行指令

Zabbix用常规功能执行用户参数、远程指令、系统运行[]图标,不需要“nowait”字符、脚本(警告、外部、全球)和一些内部指令。

执行步骤

在Unix和Windows系统平台上,指令/脚本的执行方式相近

-Zabbix (父进程)创建了一个交流通道。
       - Zabbix将通道设置为将要被创建的子进程的输出接口
       - Zabbix创建子进程(运行指令/脚本)
       - 为子进程创建一个新的进程组(Unix平台)或一个作业(Windows平台)
       - Zabbix读取通道信息直到超时或者没有人写到另一端(所有的句柄/文件描述符都已关闭)。注意,子进程在退出或关闭句柄/文件描述符之前可以创建更多的进程并退出。
       - 如果没有达到超时,Zabbix将等待直到初始子进程退出或超时
       - 如果初始子进程退出且尚未达到超时时间,Zabbix将检查初始子进程的退出代码,并将其与0值进行比较。(非零值被认为是执行失败)
       - 此时将假定一切都已完成,整个进程树(即进程组或作业)已被被终止

步骤5-8不要引用远程指令,因为它们是用“nowait” 字符执行的。步骤7不要引用Zabbix agent执行的自定义脚本。

<note important>Zabbix假设指令/脚本在初始子进程退出时完成了进程,并且没有其他进程让输出句柄/文件描述符处于打开状态。当进程结束时,所有创建的进程都将被终止。 :::

所有指令中的双引号和反斜杠都以反斜杠相间隔,指令要用双引号括起来。

退出代码的检查

对执行指令/脚本的退出代码检查的操作具备以下条件:

*脚本的退出代码、远程指令、用户参数以及Zabbix agent items system.run(不带“nowait”字符)和system.hw.devices
       *任何不同于0值的退出代码被认为是执行失败
       *对执行失败的标准错误和标准输出的内容进行了收集,在前端(执行结果显示端)可获取该内容。
       *为Zabbix服务器上的远程指令创建了额外的日志条目以保存脚本的执行输出

可能出现的失败指令/脚本的前端信息和日志条目:

  • 执行失败的标准错误和标准输出的内容(如果有的话)
  • “进程退出代码:N”(输出为空,退出代码不为0)
  • “信号终止信号:N”(进程被信号终止,只适用于Linux系统)
  • “进程意外终止”(进程因不明原因终止)

了解更多关于用户参数, 远程指令, 警告脚本.