2012-07-03 26 views
1

CODE淨SSH Perl的錯誤嘗試使用退出代碼

#!/usr/bin/perl -w 
use strict; 
use warnings; 
use Net::SSH::Perl; 

my $ssh_to="10.1.1.9"; 
my @KEYFILE = ("/home/nagios/.ssh/id_dsa.pub"); 
my $local="10.1.1.5"; 
my $vip_ip="10.1.1.50:80"; 

my $remove = "/usr/bin/sudo /sbin/ipvsadm -e -t $vip_ip -r $local -w 0"; 
my $ssh = Net::SSH::Perl->new($ssh_to, identity_files=>\@KEYFILE); 
my ($stdout, $stderr, $exit) = $ssh->cmd($remove); 
if ($exit eq 0) { sleep(300); } 

輸出

[[email protected]]# ./mytest.pl
Use of uninitialized value in string eq at ./mytest.pl line 14, <GEN0> line 1
+0

請發佈您實際運行的代碼,或顯示您實際發佈的代碼的輸出。 – ikegami

+0

if語句的目標是如果退出0,如果不是,則死亡5分鐘 – erics

+0

這是我運行的實際代碼 – erics

回答

0

在Perl中,情商對於字符串,==是數字,只是一個供參考!

您正在收到錯誤,因爲未定義$ exit。

你可以做個試驗:

if (defined($exit) && ($exit== 0)) { 
    sleep(300); 
} 

這會忽略非錯誤($退出是基金),將睡覺的時候有一個$退出= 0

現在,爲什麼你想陷阱退出0,你爲什麼睡覺時發生?

+0

不是在上一行my($ stdout,$ stderr,$ exit)中定義的退出嗎?當我們運行遠程命令時,我們想要在繼續​​執行代碼之前休眠5分鐘,如果遠程命令失敗(退出狀態代碼然後我們想要死亡 – erics

+0

你是100%正確的,我打錯了$ exit作爲$錯誤,應該儘快解決。即使腳本現在給你錯誤,你是否能夠確認命令正在運行服務器是否正確? –

+0

現在它只是退出,所以告訴我退出代碼不是0,這證明了我的命令沒有在遠程主機上執行 – erics