Aim
目的是运行Opsview_rest Perl脚本。
尝试
尝试1
sudo /usr/local/nagios/bin/opsview_rest --username=admin --password=initial GET config/host/1企图2
增加了Print语句以检查Perl脚本是否可以检索环境变量。
my $url_prefix = $ENV{OPSVIEW_URL_PREFIX} || "http://localhost";
print $url_prefix;
print $ENV{OPSVIEW_URL_PREFIX};
print $url_prefix;预期结果
Opsview_rest Perl脚本调用环境变量OPSVIEW_URL_PREFIX并使用它执行脚本中的命令。
当前结果
目前的成果1
Can't connect to localhost:80 (Connection refused)目前的成果2
尽管变量已被设置
[root@vm-one libexec]# echo $OPSVIEW_URL_PREFIX
http://localhost:3000Perl脚本无法从环境中检索它。
[root@vm-one libexec]# sudo /usr/local/nagios/bin/opsview_rest --username=admin --password=initial GET config/host/1
http://localhosthttp://localhostCan't connect to localhost:80 (Connection refused)
LWP::Protocol::http::Socket: connect: Connection refused at /usr/local/nagios/bin/../perl/lib/LWP/Protocol/http.pm line 51.
Goto undefined subroutine &Carp::shortmess_real at /usr/share/perl5/Carp.pm line 41.发布于 2014-12-30 05:45:31
调试这样的问题的一个好方法是将它们剥离到演示问题的最简单的东西上。
这里有一个perl“一行程序”,它表明@hobbs是正确的,sudo正在删除密码。
$ TESTY=foo sudo perl -le 'print "The value is $ENV{TESTY}..."'
The value is ...
$ TESTY=foo perl -le 'print "The value is $ENV{TESTY}..."'
The value is foo...第一次尝试使用sudo运行,没有打印$TESTY,第二次尝试不使用sudo运行,环境变量通过很好。
现在,为了真正回答您的问题,因为sudo给了您根权限,而且由于环境变量可以以各种方式改变程序的行为,所以sudo在运行时非常努力地清理环境。这是unix,您可以改变行为。例如,-E标志可能适用于您,
$ TESTY=foo sudo -E perl -le 'print "The value is $ENV{TESTY}..."'
The value is foo...有关它正在做什么的详细信息,特别是手册页的“安全备注”部分,请参见man sudo。
https://stackoverflow.com/questions/27697669
复制相似问题