【问题标题】:Crontab fails to run my Perl moduleCrontab 无法运行我的 Perl 模块
【发布时间】:2013-09-29 18:02:34
【问题描述】:

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

【问题讨论】:

  • 请发布您的 cronjob 行。您是否检查过您是否使用了完整路径?
  • 请不要解释错误。将确切错误粘贴到您的邮件正文中。
  • 错误cd perl | perl 有点意思,但我认为无害。通常的命令分隔符是分号。

标签: linux perl crontab


【解决方案1】:

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

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

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

【讨论】:

  • 您能举例说明如何指定$PATH 和$PERL5LIB 吗?
  • 我得到的确切错误是“无法在 @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 运行文件,但无法连接到它正在调用的模块。
【解决方案2】:

试试这个:

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      例子:

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

      【讨论】:

        猜你喜欢
        • 2011-12-19
        • 1970-01-01
        • 2020-12-30
        • 2015-07-09
        • 1970-01-01
        • 1970-01-01
        • 2016-03-06
        • 2013-02-23
        • 2013-10-22
        相关资源
        最近更新 更多