10 命令执行

Zabbix常用功能包含外部检查、用户参数、system.run监控项、自定义告警脚本、远程命令和用户命令。

执行步骤

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

  1. Zabbix (父进程)创建了一个交流通道。

  2. Zabbix将通道设置为要创建的子进程的输出接口。

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

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

  5. Zabbix从通道读取,直到超时或另一端没有其他写入(所有处理/文件描述符都已关闭)。请注意,子进程可创建更多进程并在退出或关闭处理/文件描述符之前退出。

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

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

  8. 此时,假设一切都已完成,整个过程tree(即过程组或作业)终止。

Zabbix假定命令/脚本在初始子进程退出时已完成处理,并且没有其他进程仍保持输出处理/文件描述符处于打开状态。处理完成后,将终止所有创建的进程。

命令中的所有双引号和反斜杠都使用反斜杠进行转义,命令用双引号括起来。

退出代码的检查

使用以下条件检查退出代码:

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

  • 任何不同于0的退出代码都被视为执行失败。

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

  • 为Zabbix server上的远程命令创建附加日志条目以保存脚本执行输出,可使用LogRemoteCommands代理 parameter

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

  • 执行失败的标准错误和标准输出的内容(如果有的话)。

  • “进程退出代码:N.”(对于空输出,退出代码不等于0)。

  • “进程被信号终止:N.”(对于由信号终止的进程,仅在Linux上)。

  • “进程意外终止。”(由于未知原因进程终止)。


了解更多: