2013-09-24 59 views
-2

我的perl模塊工作正常,只要我運行它時不使用crontab, 但是當我嘗試通過Crontab運行腳本時,它會拋出一些錯誤,如不能找到其他模塊,這些模塊在我的內部被調用Perl.pl文件。Crontab無法運行我的Perl模塊

我在crontab文件中添加的行

* * * * * cd /usr/bin/perl | perl path_to_script/script.pl; 

我得到的錯誤是

Can't locate module.pm in @INC (@INC contains: /home/path/lib /usr/another/path/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at path_to_script/script.pl line 23 

當過我特林貫穿crontab中的腳本文件,它無法連接到子模塊。

+5

請發表您的cronjob線。你有沒有檢查你是否使用完整路徑? – fedorqui

+1

**請不要解釋錯誤**。將** exact **錯誤粘貼到消息正文中。 –

+0

錯誤'cd perl | perl'很有趣,但我認爲是無害的。通常的命令分隔符是分號。 – tripleee

回答

1

試試這個:

*/5 * * * *  bash -l perl path/script.pl 
# change the above to your crontab settings 
3

從crontab運行時,很多事情可能會有所不同。如:

  • 不同的用戶
  • 不同的外殼

通常情況下,$PATH下的crontab是不是你通常希望它是。您可能需要顯式地提供$PERL5LIB環境變量,一個Perl腳本知道在看庫文件夾

+0

你能舉一個例子說明如何指定$ PATH和$ PERL5LIB嗎? – VED

+0

我得到的確切錯誤是「無法在@INC中找到script.pm(@INC包含:/ home/path/lib/usr/another/path/lib/usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5/vendor_perl/usr/share/perl5/vendor_perl /usr/lib64/perl5/usr/share/perl5。)at path_to_script/script.pl「每當想通過crontab運行文件它無法連接到它所調用的模塊。 – VED

0

運行Perl與-I(大寫i)增加選項在哪裏找到丟失的模塊或創建類似

#!/bin/sh 
cd /usr/lib/perl 
PERL5LIB=$HOME/lib/perl perl path_to_script/script.pl 

...並從您的crontab運行此腳本代替。

(的PERL5LIB的價值可能會比這更復雜,也許複製/從其交互式殼價值粘貼)。

+0

感謝tripleee,腳本在你最後的答案中正常工作。 – VED

0

只需添加PERL5LIB環境變量/etc/crontab和包括路徑.pm模塊文件。

例子:

PERL5LIB=/root/perl5/lib/perl5:/usr/share/perl5