Zabbix脚本在服务器哪个位置?标准答案:默认存放在Zabbix Server的/usr/lib/zabbix/alertscripts目录,但根据脚本类型和安装方式,实际路径会有多个变体。
Zabbix脚本存放位置的核心路径解析
Zabbix的脚本体系主要分为两大类:报警媒介脚本和自定义监控脚本,这两类脚本的存放位置截然不同,搞混了就会导致“脚本明明存在却执行不了”的尴尬局面。
报警脚本默认目录:AlertScriptsPath
Zabbix Server端处理告警通知的脚本(如发邮件、发企业微信、调用钉钉机器人等),统一存放在由AlertScriptsPath参数定义的目录中。
- 源码包安装:默认路径是
/usr/local/share/zabbix/alertscripts - YUM/APT包安装:默认路径是
/usr/lib/zabbix/alertscripts - 编译安装自定义前缀:路径跟随
--prefix参数变化,比如--prefix=/opt/zabbix,那么脚本目录就是/opt/zabbix/share/zabbix/alertscripts
查看当前服务器上实际生效的路径,执行:
grep -i "AlertScriptsPath" /etc/zabbix/zabbix_server.conf
如果配置项被注释掉,说明使用的是编译时的默认路径,我遇到过不少运维同行,拿着网上的教程直接往/usr/lib/zabbix/alertscripts丢脚本,结果服务器是编译安装的,自然怎么调都不触发。
自定义监控脚本:ExternalScripts目录
通过Zabbix Agent主动拉取方式执行的自定义脚本(比如检查某个进程状态、拉取业务接口数据),存放在ExternalScripts参数指定的目录。
- 服务端拉取模式:脚本存放在Zabbix Server端,路径默认是
/usr/lib/zabbix/externalscripts - Agent主动推送模式:脚本存放在Zabbix Agent端,路径默认是
/etc/zabbix/scripts(部分发行版为/usr/local/etc/zabbix_agentd.conf.d)
这里有个高频坑:用zabbix_get测试时脚本执行正常,但监控项里就是报“Not supported”,多数情况是Server端的ExternalScripts路径和Agent端的UserParameter路径搞混了,Server端拉取模式,脚本必须躺在Server机器的ExternalScripts目录里,Agent端配置的UserParameter只是定义参数格式,不存放脚本本体。

Agent端UserParameter脚本路径
在Zabbix Agent端,通过UserParameter自定义键值关联的脚本,存放位置相对自由,但行业共识是统一放在/etc/zabbix/scripts/目录下,修改Agent配置文件:
vim /etc/zabbix/zabbix_agentd.conf
在文件末尾添加:
UserParameter=mycheck,/etc/zabbix/scripts/mycheck.sh
然后重启Agent服务,脚本路径必须写绝对路径,且Agent运行用户(通常是zabbix用户)要有执行权限,这块的权限问题特别容易踩坑,后面单独讲。
不同安装方式下zabbix脚本路径怎么改
修改AlertScriptsPath重定向脚本目录
如果你不想把脚本放在默认位置,可以手动修改配置文件,编辑zabbix_server.conf:
vim /etc/zabbix/zabbix_server.conf
找到这一行,去掉注释并修改:
AlertScriptsPath=/data/zabbix/scripts/alertscripts
保存后重启zabbix-server服务:
systemctl restart zabbix-server
修改路径后,前端页面“管理-报警媒介”里配置的脚本名称,会直接拼接这个绝对路径去寻找脚本文件,所以脚本文件名不要带路径,只写文件名即可。
区分Server端和Agent端脚本目录权限
Server端的报警脚本和执行外部检查的脚本,运行用户是zabbix,Agent端UserParameter脚本的运行用户取决于zabbix_agentd.conf里的User参数,默认也是zabbix。
这意味着脚本需要具备:
- 属主或属组为zabbix:
chown zabbix:zabbix /etc/zabbix/scripts/check.sh - 执行权限:
chmod +x /etc/zabbix/scripts/check.sh - 脚本内引用的临时文件目录可写:比如脚本要写日志到
/tmp,没问题;写到/var/log/zabbix,就得确认目录权限
我用一个表格总结常见路径和权限要求:
| 脚本类型 | 默认路径 | 运行用户 | 配置参数 |
|---|---|---|---|
| 报警媒介脚本 | /usr/lib/zabbix/alertscripts | zabbix | AlertScriptsPath |
| Server端外部检查 | /usr/lib/zabbix/externalscripts | zabbix | ExternalScripts |
| Agent端UserParameter | /etc/zabbix/scripts | zabbix | UserParameter |
排查zabbix脚本不执行的三个关键点
路径配置与脚本实际位置不匹配
这是zabbix脚本在服务器哪个位置这个问题最常见的翻车原因,很多人在前端配置脚本名时,习惯性把路径也带上,比如/usr/lib/zabbix/alertscripts/sendmail.py,但Zabbix会自动拼接AlertScriptsPath和脚本名,结果实际去执行的路径变成了/usr/lib/zabbix/alertscripts//usr/lib/zabbix/alertscripts/sendmail.py,自然找不到文件。
正确做法:前端“报警媒介”里只填脚本文件名,比如sendmail.py。
脚本解释器环境变量缺失
脚本手动执行没问题,但Zabbix调用就报错,这是环境变量问题,Zabbix执行脚本时,PATH环境变量极其精简,通常只有/bin:/usr/bin,如果你的脚本里用了python3、curl这类命令,而它们装在/usr/local/bin下,脚本就会执行失败。
解决办法是在脚本开头显式声明解释器和命令路径:
#!/usr/bin/python3
import sys
sys.path.append('/usr/local/lib/python3.8/site-packages')
或者通过软链接把命令链接到标准路径:
ln -s /usr/local/bin/python3 /usr/bin/python3
脚本执行超时问题
Zabbix默认对脚本执行有超时限制,Server端外部检查超时时间由Timeout参数控制,默认3秒,Agent端UserParameter的超时由Agent的Timeout参数控制,同样是3秒。
如果你的脚本执行耗时超过3秒,监控项就会报超时,处理方式:
- 调大
zabbix_server.conf里的Timeout=10 - 优化脚本逻辑,把耗时操作改为异步或后台执行
- 用
nohup方式快速返回,结果通过日志或文件读取
Zabbix脚本目录管理的最佳实践
统一目录规划,避免路径混乱

生产环境中,建议把所有Zabbix相关脚本集中管理,通过软链接方式映射到默认目录:
mkdir -p /data/zabbix/scripts/{alert,external,agent}
ln -s /data/zabbix/scripts/alert /usr/lib/zabbix/alertscripts
ln -s /data/zabbix/scripts/external /usr/lib/zabbix/externalscripts
这样备份和版本管理都方便,升级Zabbix时也不会因为覆盖默认目录而丢失脚本。
脚本日志与调试技巧
排查脚本问题时,手动以zabbix用户执行是最直接的验证方式:
su - zabbix -s /bin/bash -c "/usr/lib/zabbix/alertscripts/sendmail.py test"
注意看输出和错误信息,Zabbix Server的日志文件/var/log/zabbix/zabbix_server.log里,会记录脚本执行的具体报错信息,包括退出码和stderr输出,这是定位问题最可靠的依据。
Zabbix脚本位置常见问题解答
问:zabbix_get测试监控项正常,但前端页面显示不支持,脚本路径明明是对的,为什么?
答:zabbix_get工具本身不读取zabbix_server.conf配置,它直接通过Agent的密钥参数获取数据,前端监控项如果配置的是外部检查类型,走的是Server端ExternalScripts目录,不是Agent端脚本,检查前端监控项类型是“Zabbix采集器”还是“外部检查”,前者需要Agent端配置UserParameter,后者需要脚本躺在Server端的ExternalScripts目录里。
问:报警脚本放在哪个目录才能被Zabbix Server调用?
答:必须放在AlertScriptsPath参数指定的目录中,配置文件里这一项通常默认是/usr/lib/zabbix/alertscripts(包安装)或/usr/local/share/zabbix/alertscripts(源码安装),修改路径后需要重启zabbix-server服务,前端配置的脚本名不能包含任何路径前缀。
问:Agent端UserParameter脚本执行权限怎么设置最稳妥?
答:脚本属主设为zabbix用户,权限为750即可,需要注意脚本文件所在目录的父级目录,zabbix用户需要具备执行权限(x权限)才能进入目录,如果脚本需要写日志,对应日志目录属主也要改成zabbix,部分场景下脚本会调用系统命令,用which确认命令路径后,在脚本里写绝对路径调用,避免环境变量问题。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/737560.html

