Crontab无法运行我的Perl模块

时间:2013-09-24 13:28:49

标签: linux perl crontab

每当我在不使用crontab的情况下运行它时,我的perl模块工作正常 但是当我尝试通过Crontab运行脚本时,它会抛出一些错误,比如无法找到在我的Perl.pl文件中调用的其他模块。

我在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文件运行脚本时,它无法连接到子模块。

4 个答案:

答案 0 :(得分:3)

从crontab运行时,有很多东西可能会有所不同。如:

  • 不同的用户
  • 不同的外壳

crontab下的$PATH通常不是您通常所期望的那样。您可能必须显式提供$PERL5LIB环境变量,以便Perl脚本知道要查找的库文件夹。

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:0)

使用-I(大写i)选项运行Perl,指示在哪里找到缺少的模块,或者创建类似

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

...而是从你的crontab运行这个脚本。

PERL5LIB的值可能必须比此更复杂;可能会从交互式shell中的值复制/粘贴。)

答案 3 :(得分:0)

只需在PERL5LIB中添加/etc/crontab环境变量,并包含.pm模块文件的路径。

示例:

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