windows - 调用 ssh2 命令的 Perl 脚本无法在 Windows 任务计划程序中取回输出

标签 windows perl task scheduler

我可以毫无问题地从命令行运行 Perl 脚本,但是当我尝试使用 Windows 任务管理器(64 位 Windows 2008 Server)自动执行此任务时,SSH/SSH2 的输出无法写入输出文件。它是一个 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 无法创建...错误:”。

最佳答案

这种问题通常是因为手动运行程序和从调度程序运行程序时使用的环境不同。 ssh 对此特别敏感,因为它将用户和主机 key 存储在用户文件夹中的文件中。

您应该尝试的第一件事是在 Debug模式下从您的脚本运行 ssh:

ssh -vvv ...

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

关于windows - 调用 ssh2 命令的 Perl 脚本无法在 Windows 任务计划程序中取回输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12943962/

相关文章:

c++ - 为什么达到峰值后内存泄漏不再继续?

C Hello world : Code Blocks IDE, Windows 上的 MinGW C 编译器

perl - 我如何在 Class::DBI 中使用 add_to?

windows - 是否可以使用标准库来生成进程而不在 Windows 中显示控制台窗口?

windows - ElementHost 中的 Application.Current 为空

perl - 如何修复这些失败的 Perl 测试?

perl - 全局访问perl中的变量

c# - Java/C# - Array[][] 复杂性任务

inno-setup - 控制自定义页面在特定任务后显示

java - java spring 链式计划任务