10 命令执行
Zabbix常用功能包含外部检查、用户参数、system.run监控项、自定义告警脚本、远程命令和用户命令。
执行步骤
命令/脚本在Unix和Windows系统平台上的执行方式相近:
Zabbix (父进程)创建了一个交流通道。
Zabbix将通道设置为要创建的子进程的输出接口。
Zabbix创建子进程(运行命令/脚本)。
为子进程创建一个新的进程组(Unix平台)或一个作业(Windows平台)。
Zabbix从通道读取,直到超时或另一端没有其他写入(所有处理/文件描述符都已关闭)。请注意,子进程可创建更多进程并在退出或关闭处理/文件描述符之前退出。
如果尚未达到超时,Zabbix将等待,直到初始子进程退出或发生超时。
如果初始子进程已退出且尚未超时,Zabbix将检查初始子进程的退出代码并将其与0进行比较(非零值被视为执行失败,仅适用于在Zabbix server 和Zabbix proxy上执行的自定义告警脚本,远程命令和用户脚本 )。
此时,假设一切都已完成,整个过程tree(即过程组或作业)终止。
Zabbix假定命令/脚本在初始子进程退出时已完成处理,并且没有其他进程仍保持输出处理/文件描述符处于打开状态。处理完成后,将终止所有创建的进程。
命令中的所有双引号和反斜杠都使用反斜杠进行转义,命令用双引号括起来。
退出代码的检查
使用以下条件检查退出代码:
仅适用于在Zabbix server和Zabbix proxy上执行的自定义告警脚本,远程命令和用户脚本。
任何不同于0的退出代码都被视为执行失败。
标准错误的内容和执行失败的标准输出会被收集并展示在前端(显示执行结果)。
为Zabbix server上的远程命令创建附加日志条目以保存脚本执行输出,可使用LogRemoteCommands代理 parameter 。
前端可能出现的失败命令/脚本信息和日志条目:
执行失败的标准错误和标准输出的内容(如果有的话)。
“进程退出代码:N.”(对于空输出,退出代码不等于0)。
“进程被信号终止:N.”(对于由信号终止的进程,仅在Linux上)。
“进程意外终止。”(由于未知原因进程终止)。
了解更多: