- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
问题:我们使用Zabbix作为监控系统。除了使用其内置项目之外,我们还使用称为外部脚本功能( this )的功能,可以通过 Zabbix 编写和调用自定义脚本。这里面临的问题是它超时了。脚本是简单的期望文件,它进入设备内部并提取一些数据。这在通过 root 调用时有效。但是当通过 Zabbix 用户调用时,它会提示
/usr/bin/expect: /usr/bin/expect: cannot execute binary file
脚本看起来像这样,
#!/usr/bin/expect
set host "IP_ADDRESS"
set uname "username"
set pwd "password"
set prompt "#|>|:|\\\$";
set val ""
set domain [lindex $argv 0]
log_user 0
set timeout -1
spawn /usr/bin/ssh "$uname@$host"
expect "$uname@$host's password:"
send "$pwd\n"
sleep 1
#expect -re "$prompt"
expect ">"
sleep 1
send "show wireless rf-domain statistics detail on $domain | grep Signals\r"
sleep 1
expect ">"
set val $expect_out(buffer)
send "exit\n"
puts $val
这被命名为 rf_signal.exp。它通过名为 rf_signal 的包装 shell 脚本进行调用。
#!/bin/bash
val=$(/usr/bin/expect '/usr/local/etc/scripts/rf_signal.exp' $1 | grep 'RF Signals' | cut -d':' -f2 | cut -d',' -f1 | cut -d' ' -f3 | sed -e 's/\s//g')
echo "$val"
如果以 root 身份调用,则效果很好
[root@zbx-proxy2 externalscripts]# pwd
/usr/local/share/zabbix/externalscripts
[root@zbx-proxy2 externalscripts]# whoami
root
[root@zbx-proxy2 externalscripts]# /usr/local/share/zabbix/externalscripts/rf_signal DOMAIN_NAME
241
[root@zbx-proxy2 externalscripts]#
就好像我以 zabbix 用户身份调用一样,出现无法执行二进制文件错误。以 Expect 作为路径
[root@zbx-proxy2 externalscripts]# runuser -l zabbix /usr/bin/expect /usr/local/share/zabbix/externalscripts/rf_signal
/usr/bin/expect: /usr/bin/expect: cannot execute binary file
[root@zbx-proxy2 externalscripts]#
没有期望作为路径,它会等待 -
[root@zbx-proxy2 externalscripts]# runuser -l zabbix /usr/local/share/zabbix/externalscripts/rf_signal
PSTree 命令输出显示它调用了 Expect 和文件内的内容
[root@zbx-proxy2 ~]# pstree -p 26295
runuser(26295)---bash(26296)---bash(26309)-+-cut(26312)
|-cut(26313)
|-cut(26314)
|-expect(26310)---ssh(26316)
|-grep(26311)
`-sed(26315)
PS 详细信息。
[root@zbx-proxy2 ~]# ps aux | grep zabbix | grep -v "proxy\|agent\|fping"
root 26295 0.0 0.0 130700 1388 pts/3 S+ 15:46 0:00 runuser -l zabbix /usr/local/share/zabbix/externalscripts/rf_signal
zabbix 26296 0.0 0.0 108184 1628 pts/3 S+ 15:46 0:00 -bash /usr/local/share/zabbix/externalscripts/rf_signal
zabbix 26309 0.0 0.0 108184 576 pts/3 S+ 15:46 0:00 -bash /usr/local/share/zabbix/externalscripts/rf_signal
zabbix 26310 0.0 0.0 115336 2260 pts/3 S+ 15:46 0:00 /usr/bin/expect /usr/local/etc/scripts/rf_signal.exp
zabbix 26311 0.0 0.0 103260 868 pts/3 S+ 15:46 0:00 grep RF Signals
zabbix 26312 0.0 0.0 100972 676 pts/3 S+ 15:46 0:00 cut -d: -f2
zabbix 26313 0.0 0.0 100972 672 pts/3 S+ 15:46 0:00 cut -d, -f1
zabbix 26314 0.0 0.0 100972 676 pts/3 S+ 15:46 0:00 cut -d -f3
zabbix 26315 0.0 0.0 105268 872 pts/3 S+ 15:46 0:00 sed -e s/\s//g
zabbix 26316 0.0 0.0 59856 3220 pts/14 Ss+ 15:46 0:00 /usr/bin/ssh username@IP_ADDRESS
root 26688 0.0 0.0 105324 912 pts/7 S+ 15:47 0:00 grep zabbix
[root@zbx-proxy2 ~]#
所有脚本对所有用户都具有读取和执行权限。并期望/grep/cut - 脚本内使用的任何内容都具有读取/执行权限。可能是什么问题?
最佳答案
我建议你使用:
su - zabbix -c "/usr/local/share/zabbix/externalscripts/rf_signal"
运行脚本而不是runuser
。
通常,zabbix
用户将 /sbin/nologin
设置为登录 shell,这意味着您将无法通过 ssh
登录到相应的服务器。您可以在远程服务器上检查 /etc/passwd
来验证这一点。
作为补充说明,您可以使用 expect -d
在您的 Expect 脚本中启用调试并查看失败的位置。将expect的timeout
设置为不同的值,例如180
(3分钟)而不是-1
,否则它将永远不会退出。
关于linux - 无法在 CentOS 上执行二进制文件 - Zabbix 外部脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48744328/
我正在监视某些 FreeIPA 服务器,这些服务器通常 fork 300 覆盖我专门为同样继承“Template OS Linux”和“Template IPA Servers”的此类服务器创建的另一
我正在尝试设置 zabbix 代理。我的网络如下 Zabbix服务器IP:192.168.101.11(内网)Zabbix代理服务器:192.168.102.109(内网)Zabbix 代理:172.
操作系统:Debian10 应用程序:Zabbix4.0 安装的应用程序:Mariadb、Apache2、php 在 mysql 中输入此命令后,出现此错误。 create database zabb
我正在尝试测试 ZABBIX 的 IBM MQ 模块,所有代码都发布在 the ZABBIX share ,但是由于我是新手并且没有解释的步骤来做到这一点,所以我被卡住了。 所以我正在使用 ZABBI
This question already has answers here: PHP parse/syntax errors; and how to solve them (18个回答) 2年前关闭
我已经在 ubuntu 14.0 上成功安装了 Zabbix 3.2 服务器主机上的 Z 是绿色的。不幸的是,JMX 是红色的。 Zabbix 服务器:192.168.1.112 带有 tomcat
使用 Zabbix,如果某个项目无法访问(例如“ZBX_NOTSUPPORTED”或当 zabbix 代理无法提供预期的项目格式时跟踪到的任何错误),我如何触发警报? 目标是防止主机在检索项目数据时静
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
来自 Zabbix 手册计算的项目表达式遵循以下形式, func(|,,,...) 这对于在单个项目上使用函数进行计算非常有用,例如, max("temp1",120) 像 min() 这样的函数应该
zabbix部署文档 zabbix部署完之后 zabbix-agent操作 1.监控mysql,首先要先安装mysql ?
1、安装包下载 下载地址:https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/ 2、安装
在使用zabbix自定义脚本采集监控数据的时候,通常会遇到以下一些问题: 服务器扩容之后,监控脚本如何部署到新的服务器上? 监控脚本需要修改时,如何自动修改所有相同的监控脚本?
以zabbix自身的WEB界面为例配置web监测 环境:zabbix4.2.8 1、路径:配置――主机――选择‘WEB监测",点击右上角‘创建WEB场景" 2、填写
背景信息 最近在重新看一些关于windows 性能的书籍,对于我这样一个原来使用SCOM监控的懒人来说,Zabbix 上自带的windows OS template 的模板实在是不够用,因为之前S
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
大 Zabbix 粉丝在这里,对细节不熟悉。 我有一个在我的远程桌面服务器上运行的脚本,它使用当前的 TS session 写入一个文件。 Zabbix 依次读取这个文件,有 2 种不同的方式; 1、
17460:20220531:100735.556 using configuration file: /etc/zabbix/zabbix_server.conf 17460:20220531:1
再会。使用 net.if.in 和 net.if.out 键,我得到通过网络接口(interface)传输的总字节数。如果我将值存储为增量,我将获得每秒的速度。有没有办法获得每天和每周传输的数据量?先
我使用 Zabbix 作为我的 Linux 监控解决方案。 它显示 MySQL - The buffer pool utilization is less than 50% in the last 5
我想从我所有运行 zabbix agent 的服务器 ping 一个外部 ip。 我搜索并找到了一些关于zabbix用户参数的文章。在 /etc/zabbix/zabbix_agentd.conf.d
我是一名优秀的程序员,十分优秀!