-2

当我在不使用 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

4 回答 4

3

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

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

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

于 2013-09-24T13:42:58.257 回答
1

试试这个 :

*/5 * * * *        bash -l  perl  path/script.pl
# change the above to your crontab settings
于 2013-09-24T17:16:23.340 回答
0

使用 -I(大写 i)选项运行 Perl,指示在哪里可以找到丢失的模块,或创建类似的包装器

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

...并从您的 crontab 运行此脚本。

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

于 2013-09-24T20:05:35.130 回答
0

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

例子:

PERL5LIB=/root/perl5/lib/perl5:/usr/share/perl5
于 2015-10-03T00:06:48.260 回答