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