2014-12-29 1 views
1

목표

목표는 Opsview_rest Perl 스크립트를 실행하는 것입니다.


시도

시도 2 ​​

인쇄 문이 펄 스크립트 환경 변수를 검색 할 수 있는지 여부를 확인하기 위해 추가 된 1 개

sudo /usr/local/nagios/bin/opsview_rest --username=admin --password=initial GET config/host/1 

시도합니다.

my $url_prefix = $ENV{OPSVIEW_URL_PREFIX} || "http://localhost"; 

print $url_prefix; 
print $ENV{OPSVIEW_URL_PREFIX}; 
print $url_prefix; 

Opsview_rest 펄 스크립트는 환경 변수 OPSVIEW_URL_PREFIX를 호출하고 스크립트


현재 결과

에서 명령을 실행하는 데 사용할

예상 결과

변수가

[[email protected] libexec]# echo $OPSVIEW_URL_PREFIX 
http://localhost:3000 

이 펄 스크립트 환경에서 검색 할 수 없습니다 설정 한 1

Can't connect to localhost:80 (Connection refused) 

현재 결과 2

있지만 현재 결과.

[[email protected] 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. 
+0

무엇이 당신의 질문입니까? – TLP

+0

@TLP 환경 변수 OPSVIEW_URL_PREFIX가 Perl 스크립트에 의해 시스템에서 설정되어있는 동안 찾을 수 없습니다. 이 – 030

+0

@TLP를 사용하여 찾을 수 있어야하는 동안 $ ENV {OPSVIEW_URL_PREFIX}은 var을 찾지 못합니다. 시스템의 반향이 시스템이 변수를 찾을 수 있음을 나타내지 만 Perl 스크립트는이를 호출 할 수 있어야합니다 '$ ENV {OPSVIEW_URL_PREFIX}'를 사용하고 있습니까? 그것은 출력을 인쇄 할 때 그것을 찾지 않는 것 같습니다. 나는 왜 그런지 이해하지 못한다. – 030

답변

1

이와 같은 문제를 디버깅하는 가장 좋은 방법은 문제를 설명 할 수있는 가장 단순한 것으로 제거하는 것입니다.

여기 @hobbs가 정확하다는 것을 나타내는 perl "one-liner"이며 암호는 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 실행하고, 퉁명스러운 인쇄되지 $는 두 번째 시도는sudo없이 를 실행하고 환경 변수를 잘 통해 제공됩니다.

실제로 질문에 대답하기 위해 sudo이 루트 권한을 제공하고 환경 변수가 모든 방식으로 프로그램의 동작을 변경할 수 있기 때문에 sudo은 실행시 환경을 정리하는 데 정말로 부지런합니다. 이것은 유닉스이기 때문에 동작을 바꿀 수 있습니다.예를 들어 -E 플래그는

$ TESTY=foo sudo -E perl -le 'print "The value is $ENV{TESTY}..."' 
The value is foo... 

는 무엇을하고 있는지 자세한 내용 man sudo을보고, 그 사람 페이지 특히 "보안 정보"섹션, 당신을 위해 일한다 수도 있습니다.