8 执行指令
Zabbix用常规功能执行用户参数、远程指令、系统运行[]图标,不需要“nowait”字符、脚本(警告、外部、全球)和一些内部指令。
执行步骤
在Unix和Windows系统平台上,指令/脚本的执行方式相近
Zabbix (父进程)创建了一个交流通道。
Zabbix将通道设置为将要被创建的子进程的输出接口
Zabbix创建子进程(运行指令/脚本)
为子进程创建一个新的进程组(Unix平台)或一个作业(Windows平台)
Zabbix读取通道信息直到超时或者没有人写到另一端(所有的句柄/文件描述符都已关闭)。注意,子进程在退出或关闭句柄/文件描述符之前可以创建更多的进程并退出。
如果没有达到超时,Zabbix将等待直到初始子进程退出或超时
如果初始子进程退出且尚未达到超时时间,Zabbix将检查初始子进程的退出代码,并将其与0值进行比较。(非零值被认为是执行失败)
此时将假定一切都已完成,整个进程树(即进程组或作业)已被被终止
步骤5-8不要引用远程指令,因为它们是用“nowait” 字符执行的。步骤7不要引用Zabbix agent执行的自定义脚本。
Zabbix假设指令/脚本在初始子进程退出时完成了进程,并且没有其他进程让输出句柄/文件描述符处于打开状态。当进程结束时,所有创建的进程都将被终止。
所有指令中的双引号和反斜杠都以反斜杠相间隔,指令要用双引号括起来。
退出代码的检查
对执行指令/脚本的退出代码检查的操作具备以下条件:
脚本的退出代码、远程指令、用户参数以及Zabbix agent items system.run(不带“nowait”字符)和system.hw.devices
任何不同于0值的退出代码被认为是执行失败
对执行失败的标准错误和标准输出的内容进行了收集,在前端(执行结果显示端)可获取该内容。
为Zabbix服务器上的远程指令创建了额外的日志条目以保存脚本的执行输出
可能出现的失败指令/脚本的前端信息和日志条目:
执行失败的标准错误和标准输出的内容(如果有的话)
“进程退出代码:N”(输出为空,退出代码不为0)
“信号终止信号:N”(进程被信号终止,只适用于Linux系统)
“进程意外终止”(进程因不明原因终止)