Zabbix使用通用功能来实现外部检查、用户参数、 系统.run 监控项、自定义告警脚本、远程命令以及全局 脚本。
默认情况下,Zabbix中的所有脚本都使用sh shell执行, 且无法修改默认shell。要使用不同的shell, 可以采用变通方法:create一个脚本file并在命令执行期间调用该脚本。
命令/脚本在Unix和Windows平台上的执行方式类似:
Zabbix(父进程)创建一个用于通信的管道
Zabbix将管道设置为待创建子进程的输出
Zabbix创建子进程(运行命令/脚本)
为子进程创建一个新的进程组(Unix)或作业(Windows)
Zabbix从管道读取数据,直到超时发生或另一端无人写入 (所有句柄/file描述符已关闭)。 注意子进程可以create更多进程并在它们退出或关闭句柄/file描述符前先行退出。
如果未达到超时,Zabbix会等待初始子进程退出或超时发生
如果初始子进程已退出且未达到超时,Zabbix检查初始子进程的退出代码 并与0比较(非零值视为执行失败,仅适用于在Zabbix server和Zabbix proxy上执行的 自定义告警脚本、远程命令和用户脚本)
此时假定所有操作已完成且整个
process tree (i.e. the process group or the job) is terminated
Zabbix假定当初始子进程已退出 且没有其他进程仍保持输出句柄/file描述符打开时,命令/脚本已完成 处理。当处理完成时,所有创建的进程都将被终止。
命令中的所有双引号和反斜杠都会用反斜杠转义, 且命令会被包裹在双引号中。
退出码通过以下条件进行检查:
仅适用于自定义告警脚本、远程命令以及在Zabbix server和Zabbix proxy上执行的用户脚本
任何非0的退出码均被视为执行失败
失败执行的标准错误和标准输出内容会被收集并显示在前端(执行结果展示处)
对于在Zabbix agent/proxy上执行的远程命令,可能会创建额外的日志条目
失败命令/脚本可能产生的前端消息和日志条目: