2012-07-03 2 views
1

КОДошибка Net 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 состоит в том, чтобы спать в течение 5 минут, если выход 0, если нет, тогда умирают – erics

+0

Это фактический код, который я запустил – erics

ответ

0

В Perl'е, эк для строк, == для чисел, просто FYI!

Вы получаете ошибку, потому что $ exit не определен.

Попробуйте этот тест:

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

Это будет игнорировать не-ошибки ($ выход есть UNDEF) и будет спать, когда есть $ выход = 0

Теперь, почему вы пытаетесь поймать выход 0 и почему вы спите, когда это происходит?

+0

Не завершен ли выход в предыдущей строке my ($ stdout, $ stderr, $ exit)? Когда мы запускаем удаленную команду, мы хотим спать в течение 5 минут, прежде чем мы продолжим наш код, если удаленная команда завершится с ошибкой (код состояния выхода другие тогда 0, тогда мы хотим умереть – erics

+0

Вы на 100% верны, я ошибся $ exit как $ error, должен быть исправлен в ближайшее время. Хотя скрипт дает вам ошибку прямо сейчас, можете ли вы подтвердить, что команда запущена сервер правильно? –

+0

теперь он просто выходит, так что говорит мне, что код выхода не был 0, что подтверждается тем фактом, что моя команда не выполняется на удаленном хосте – erics