调用ssh2命令的Perl脚本无法在Windows任务调度程序中返回输出

时间:2012-10-17 21:49:36

标签: windows perl task scheduler

我可以从命令行运行Perl脚本而不会出现任何问题,但是当我尝试使用Windows任务管理器(64位Windows 2008 Server)自动执行此任务时,SSH / SSH2的输出无法写入outfile。它是一个perl脚本,它做了类似的事情:

my $DB_FILE1=$PATH . "\\FSBusinessUtil_" . $hostfqdn . $DATE;
open( OUTFILE,  ">$DB_FILE1" )      or die "Could not open data file ";
print OUTFILE "FilesystemInfo\n";   

my $output1=`$SSH_PATH\\ssh $user\@$hostname NAS_DB=/nas /nas/bin/./nas_fs -list`;

if($? != $RC_OK){
    open( OUT1FILE, ">$PATH\\errFSBusinessUtil_$hostfqdn$DATE");
    print OUT1FILE localtime(time) . " Remote ssh failed to create $DB_FILE1. Error: $output1\n"; 
    close OUT1FILE;
}
else {
    $output1=~ s/%%%/\n/g;
    print OUTFILE $output1;
}  
close OUTFILE; 

Perl脚本本身是由Windows任务计划程序调用的,但是在输出文件中,我看到的只是脚本在调用ssh命令之前打印出来的“FilesystemInfo”行。除此之外,命令确实失败了,因为我看到了生成的错误文件。但仍然,$ output1是空的,所以只有“远程ssh无法创建......错误:”。

2 个答案:

答案 0 :(得分:0)

这种问题通常会出现,因为手动运行程序时以及从调度程序运行程序时使用的环境是不同的。 ssh特别明智,因为它将用户和主机密钥存储在用户文件夹中的文件中。

首先应该尝试在调试模式下从脚本运行ssh:

ssh -vvv ...

另一种可能性是使用不使用环境中任何信息的Net::SSH2,因此不会受到这类问题的影响。

答案 1 :(得分:0)

我在预定的VBscript中运行SCP和SSH时遇到了类似的问题。选中“以最高权限运行”就可以了。