9 命令执行
Zabbix 对外部检查、用户参数、system.run 监控项、自定义告警脚本、远程命令和全局脚本使用通用功能。
执行步骤
默认情况下,Zabbix中的所有脚本都是使用 sh shell执行的,并且无法修改默认shell。 要使用不同的 shell,您可以采用一种解决方法: 创建一个脚本文件并在命令执行期间调用该脚本。
命令/脚本在 Unix 和 Windows 平台上的执行方式类似:
- Zabbix(父进程)创建一个用于通信的管道
- Zabbix将管道设置为待创建的子进程的输出
- Zabbix创建子进程(运行命令/脚本)
- 为子进程创建新的进程组(在 Unix 中)或作业(在 Windows 中)
- Zabbix从管道中读取,直到发生超时 或没有数据写入另一端(所有句柄/文件描述符都已关闭)。 请注意,子进程可以创建更多进程, 并在退出或关闭句柄/文件描述符之前退出。
- 如果没有发生超时, Zabbix会一直等待,直到初始子进程退出或发生超时
- 如果初始子进程退出且未发生超时, Zabbix会检查初始子进程的退出代码, 并将其与0进行比较(非零值被视为执行失败, 仅适用于在Zabbix server和Zabbix proxy上执行的自定义告警脚本、远程命令和用户脚本)
- 此时,如果所有操作都已完成,整个过程树(即过程组或作业)终止
Zabbix 中,初始子进程已退出,并且没有其他进程仍保持输出句柄/文件描述符打开状态时,则判断命令/脚本已经完成了处理。 处理完成后,所有创建的进程都会被终止。
命令中的所有双引号和反斜杠都使用反斜杠进行转义,并且命令用双引号括起来。
退出代码检查
退出代码按以下条件进行检查:
- 仅适用于在 Zabbix 服务器和 Zabbix proxy 上执行的自定义告警脚本、远程命令和用户脚本。
- 任何不等于 0 的退出代码都被视为执行失败。
- 对于执行失败的情况,会收集标准错误和标准输出的内容,并可在前端中查看(显示执行结果的位置)。
- 通过在 agent/proxy 上启用 LogRemoteCommands 参数,可为在 Zabbix agent/proxy 上执行的远程命令创建额外的日志条目。
对于失败的命令/脚本,前端中可能显示的消息和日志条目包括:
- 执行失败时的标准错误和标准输出内容(如有)。
- “进程已退出,代码:N。”(当输出为空且退出代码不等于 0 时)。
- “进程被信号终止:N。”(当进程被信号终止时,仅适用于 Linux)。
- “进程意外终止。”(当进程因未知原因终止时)。