2012-06-03 124 views
0

我在Windows 2008服務器上安裝了awstats。 我安排了Updatestats.bat文件每天運行,任務運行正常,沒有錯誤,但腳本沒有被執行或者拋出一個我看不見的錯誤。從windows計劃任務運行perl腳本

- 如果我直接從命令行運行bat文件,那麼它工作正常。 -

我曾嘗試過各種替代Windows的調度,如「nncron」和「Freebyte Task Scheduler」,nncron有同樣的問題,但freebyte應用程序的工作,但遺憾的是它不作爲服務運行,所以是沒用。 這裏是bat文件的內容,所有行都是這樣的。

c:\strawberry\perl\bin\perl.exe D:\AWStats\wwwroot\cgi-bin\awstats.pl config=earlsmere.co.uk -update 

任何人有任何想法?

+0

我不知道Perl,所以這可能是或不是答案,但是你需要從當前目錄中獲取一些數據嗎?如果是的話,你的Perl腳本是從數據所在的目錄運行的嗎? – Steve

回答

0

貌似輸出獲取空間迷失......

我建議重定向命令的輸出到一個文件中,就像這樣:

c:\strawberry\perl\bin\perl.exe D:\AWStats\wwwroot\cgi-bin\awstats.pl config=earlsmere.co.uk -update > c:\my_log.txt 2>&1 

(安德斯·林達爾的禮貌:Redirect stdout and stderr to a single file in DOS

1

您的無人看管環境與您的命令行顯然不同。檢查是否設置了以下內容:

  1. 腳本的工作目錄,如果它讀取任何內容或使用相對路徑。
  2. PERL * _LIB環境變量,如果您的腳本使用任何模塊。
  3. PATH環境變量,如果您的腳本調用任何外部腳本/二進制文件。
  4. 正在運行計劃任務的用戶對您要執行的所有操作都擁有足夠的權限。

作爲一個快速的解決方法,你可以在腳本中使用chdir function,​​和$ENV{PATH} entry直接設置。

您也可以嘗試捕獲標準輸出和錯誤有以下重定向你開始做任何事情之前:

open(STDOUT, '>>', '/full/path/to/out.log') || die "Error stdout: $!"; 
open(STDERR, '>>', '/full/path/to/err.log') || die "Error stderr: $!"; 

請注意,您真的應該在你確實有工作目錄設置錯誤的情況下,有使用完整路徑。並確保目標目錄/文件對任何人都可寫。

相關問題