10 命令执行

Zabbix 使用通用功能进行外部检查,用户参数,system.run 监控项,自定义警报脚本,远程命令和用户脚本。

执行步骤

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

  1. Zabbix(父进程)创建通信管道
  2. Zabbix将管道设置为待创建子进程的输出
  3. Zabbix 创建子进程(运行命令/脚本)
  4. 为子进程创建一个新的进程组 (在Unix中)或一个作业(在 Windows 中)
  5. Zabbix 从管道读取,直到发生超时或没有数据写入另一端(所有句柄/文件描述符已关闭)。请注意,子进程可以在退出或关闭句柄/文件描述符之前创建更多进程并退出
  6. 如果没有发生超时,会一直等到初始子进程退出或者超时发生
  7. 如果初始子进程退出且未达到超时时间,Zabbix 会检查初始子进程的退出代码,并将其与 0 进行比较(非零值视为执行失败,仅适用于自定义警报脚本、远程命令和用户脚本在Zabbix server 和 Zabbix proxy)上执行)
  8. 此时假设一切都已完成,整个进程树(即进程组或作业)将终止

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

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

退出代码的检查

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

  • 仅适用于在Zabbix server 和 Zabbix proxy上执行的自定义告警脚本,远程命令和用户脚本。
  • 任何不为0的退出代码都被视为执行失败。
  • 收集失败执行的标准错误和标准输出的内容,并在前端(显示执行结果)中提供。
  • 为Zabbix server上的远程命令创建附加日志条目以保存脚本执行输出,并可使用LogRemoteCommands 代理 参数启用。

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

  • 执行失败的标准错误和标准输出的内容(如果有的话)
  • “进程退出代码:N。”(对于空输出,退出代码不等于0)。
  • “进程被信号杀死:N。”(对于由信号终止的进程,仅在Linux上)。
  • “进程意外终止。”(由于未知原因终止进程)。

阅读更多关于: