0

FTP サーバーからファイルを取得し、システム コマンドを実行する perl スクリプトを実行しています。

スケジューラからタスクを実行すると、ファイルは取得されませんが、システム コマンドは実行されます。どちらも if ステートメントで囲まれているので、if ステートメントが正しく機能していることがわかります。

権限は既に確認しましたが、タスクは最高の権限を使用しています。また、管理者としてタスクを実行しています。問題は、プログラムを手動で実行すると、すべてが正常に機能することです。手動で実行すると正しく実行されるのに、スケジューラを介して実行すると正しく実行されないのはなぜですか?

コードの一部を次に示します。

if ($size_ftp == $size_local) {
            print "Files are the same...\n";
            $ftp->quit;
            print "FTP has quit!\n";
        } else {
            print "Files are not the same...begin download!\n";
            $ftp->get($file_ftp) or die "get failed ", $ftp->message;
            print "Download complete...\n";
            $ftp->quit;
            print "FTP has quit!\n";
            my $Archive_file = Archive::Extract -> new( archive => $file_dir );
            print "File extraction identified...\n";
            $Archive_file -> extract( to => $extract_here );
            print "File extracted...\n";
            system('call "C:\QMSEDX.exe"');
            print "System EDX call completed!\n";
    }
4

1 に答える 1

2

ファイルがダウンロードされていないのはなぜだと思いますか? 取得に失敗しました」というエラーはありますか? ダウンロードされたと確信していますが、あなたが望む場所にはありません。

スクリプトがスケジューラから実行される場合、現在の作業ディレクトリは通常、コマンド ラインから実行したものとは異なります。タスクのプロパティスクリプトの作業ディレクトリを設定するか、ダウンロードしたファイルを保存する場所をスクリプトに指示できます

use FindBin qw($Bin);

....

$ftp->get( $file_ftp, "$Bin/$file_ftp" ) or die "get failed ", $ftp->message;
于 2013-05-29T00:28:11.780 に答える