2017-02-01 63 views
-1

我正在工作并发现Zabbix的世界。特别是我试图通过外部脚本使用Zabbix服务器监视Oracle数据库。但是,鉴于其他外部脚本的工作原理,我使用sqlplus创建了一个,但在Zabbix上,我得到了“找不到命令”。你能告诉我为什么吗? 代码是:未找到sqlplus命令zabbix

check.pl 
#!/usr/bin/perl 
use strict; 
use warnings; 
my $out=`echo "select * from v$version;" | sqlplus user/[email protected]_database:port`; 
print $out; 

代码非常简单。 我一直创建一个项目,作为类型“外部检查”和我输入我的脚本的键传递。有谁能解决我的问题吗?另外,如果我还不清楚,只是要求更多的信息,而不是在论坛上“侮辱”:感谢大家提前

我解决了它:

echo "/usr/lib/oracle/11.2/client64/lib" > /etc/ld.so.conf.d/oracle.conf 
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/oracle/11.2/client64/lib" >> /etc/profile 

感谢所有!!!!

+0

执行脚本的机器是linux还是windows?如果Linux是在其上安装了Oracle客户端/ SQL客户端的话? – Ankit

+0

@Ankit嗨,机器是Linux。安装Oracle客户端/ SQL客户端。如果尝试在终端上的代码它的作品,但是当我将它插入Zabbix,我得到“命令未找到”。对不起我的英语不好。 – user7209199

回答

0

显然,您的zabbix服务器没有必要的环境来找到sqlplus。您可以简单地在脚本中使用sqlplus的完整路径(但这可能不够),或者创建一个包装脚本来为您的脚本设置所有必需的环境变量。

从TFM:

The command will be executed as the user Zabbix server runs as, so any access permissions or environment variables should be handled in a wrapper script, if necessary, and permissions on the command should allow that user to execute it.

+0

嗨,我认为问题是许可,但我不知道如何设置它。你可以帮我吗? – user7209199

+0

在Linux控制台窗口中输入:which sqlplus'。输出可能类似'/ opt/oracle/product/11.2.0/bin/sqlplus'。在你的脚本中,将'sqlplus'替换为'which'命令的输出,例如'我的$ out ='echo“select * from v $ version;” | /opt/oracle/product/11.2.0/bin/sqlplus user/password @ ip_database:port';'(注意,我必须更改脚本中的反引号,因为此站点使用它们进行格式化) –

+0

我尝试这是我的新错误:/usr/lib/oracle/11.2/client64/bin/sqlplus:加载共享库时出错:libsqlplus.so:无法打开共享目标文件:没有这样的文件或目录 – user7209199

0

您还必须配置为sqlplus,运行所需的sqlplus库。用于启动zabbix服务器的脚本可以在启动脚本中的oracle事件下面配置,以便zabbix可以找到所有必要的库来运行。

export ORACLE_HOME={path to Oracle Client}

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib

如果仍然是.so文件,则必须存在于你的SQL客户端安装的一些问题相关的问题。

+0

要启动zabbix服务器,我使用systemctl start zabbix-server。所以这个配置我必须插入脚本perl? – user7209199

+0

是的。但是在Perl中声明以上变量的语法可能不同,因为我对perl没有太多的了解。 :) – Ankit

+0

哪里可以找到oracle客户端的路径? – user7209199