check_mysql_query无法连接到mysql,但从命令行工作

我有在Debian Wheezy上运行的Nagios 3。 我能够从命令行运行查询以下查询。 mysql db的凭证存储在~nagios/.my.cnf

 nagios@intranet:~$ /usr/lib/nagios/plugins/check_mysql_query -H 'myhost.mydomain.com' -q "SELECT cast(AVG(availability)*100 AS DECIMAL(5,2) ) FROM crm.api_clients;" -w 70:100 -c 40:100 QUERY OK: 'SELECT cast(AVG(availability)*100 AS DECIMAL(5,2) ) FROM crm.api_clients;' returned 100.000000 

但是,当从Nagios调用相同的命令时,它不能连接到数据库。

命令和服务定义的相关部分是

 define command{ command_name check_proxy command_line /usr/lib/nagios/plugins/check_mysql_query -H 'myhost.mydomain.com' -q "SELECT cast(AVG(availability)*100 AS DECIMAL(5,2) ) FROM crm.api_clients;" -w '$ARG1$' -c '$ARG2$' } define service{ use generic-service ; Name of service template to use host_name rds_read_replica service_description Proxy availability check_command check_proxy!70:100!40:100 } 

在Web控制台中,我看到以下对服务的错误:

QUERY CRITICAL: Access denied for user 'nagios'@'172.33.13.112' (using password: NO)

当我将用户名和密码传递给命令时,它将工作在控制台上。 但是我想让check_mysql_query使用存储在.my.cnf的凭证。 我怎样才能做到这一点?

Nagios将运行没有ENV的插件,因此不设置$ HOME。 您可以使用env -i来模拟手动testing。

您可以将您的检查命令更改为像HOME=/home/nagios && /usr/lib/nagios/plugins/check_mysql_query ... (或任何path)。

如果你不能这样做,在调用真实插件之前,将整个check_command包装在一个设置HOME的shell脚本中。 还要确保抓取返回代码并将其传递给包装器脚本。