3

コマンド ラインから 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 を作成できませんでした... エラー:」だけです。

4

2 に答える 2

0

この種の問題は通常、プログラムを手動で実行する場合とスケジューラから実行する場合に使用される環境が異なるために発生します。sshユーザーフォルダ内のファイルにユーザーキーとホストキーを保存するため、これは特に賢明です。

最初に試すべきことは、デバッグモードでスクリプトからsshを実行することです。

ssh -vvv ...

もう1つの可能性は、環境からの情報を使用しないNet :: SSH2を使用することです。そのため、この種の問題の影響を受けません。

于 2012-10-18T08:11:48.350 に答える
0

スケジュールされたVBscript内でSCPとSSHを実行しているときに、同様の問題が発生しました。「最高の特権で実行」をオフにすると、うまくいきました。

于 2013-02-05T14:41:20.453 に答える