如何在crontab上执行perl脚本

如何在crontab上执行perl脚本,perl,cron,Perl,Cron,我编写了一个perl脚本test.pl,它使用另一个文件testing.pm中编写的子例程。我可以手动成功运行此脚本,但在crontab上运行相同的脚本时,会出现以下错误 无法在@INC中找到testing.pm 我已将这两个文件的权限更改为执行权限,并在脚本顶部使用了“使用测试”。如何在crontab上成功运行脚本 Crontab:**/2****PERL5LIB=$PERL5LIB:/home/test/testing.pm/home/test/test.pl>/home/test/test

我编写了一个perl脚本test.pl,它使用另一个文件testing.pm中编写的子例程。我可以手动成功运行此脚本,但在crontab上运行相同的脚本时,会出现以下错误
无法在@INC中找到testing.pm

我已将这两个文件的权限更改为执行权限,并在脚本顶部使用了“使用测试”。如何在crontab上成功运行脚本

Crontab:**/2****PERL5LIB=$PERL5LIB:/home/test/testing.pm/home/test/test.pl>/home/test/test.log 2>&1

**


**

您必须告诉您的Perl二进制文件在哪里查找
testing.pm
。您可以在crontab中执行此操作:

0 * * * * PERL5LIB=$PERL5LIB:/directory/where/testing.pm/lives perl myperlscript.pl
或者可以在.pl脚本中使用
use lib

#!/usr/bin/perl
use strict;
use warnings;
use lib '/directory/where/testing.pm/lives';
...
更新:

您编辑的问题显示了几个问题:

  • 您的crontab显示
    PERL5LIB=$PERL5LIB:/home/test/testing.pm
    。您需要将目录添加到
    PERL5LIB
    而不是文件的路径。正确的版本应该是:`PERL5LIB=$PERL5LIB:/home/test'

  • 你的
    test.pl
    use testing
    。在
    测试之后的任何地方都找不到分号


  • 您必须告诉您的Perl二进制文件在哪里查找
    testing.pm
    。您可以在crontab中执行此操作:

    0 * * * * PERL5LIB=$PERL5LIB:/directory/where/testing.pm/lives perl myperlscript.pl
    
    或者可以在.pl脚本中使用
    use lib

    #!/usr/bin/perl
    use strict;
    use warnings;
    use lib '/directory/where/testing.pm/lives';
    ...
    
    更新:

    您编辑的问题显示了几个问题:

  • 您的crontab显示
    PERL5LIB=$PERL5LIB:/home/test/testing.pm
    。您需要将目录添加到
    PERL5LIB
    而不是文件的路径。正确的版本应该是:`PERL5LIB=$PERL5LIB:/home/test'

  • 你的
    test.pl
    use testing
    。在
    测试之后的任何地方都找不到分号


  • 您的@INC阵列中是否有
    testing.pm
    ?如果没有,您可以通过PERL5LIB环境变量发送到@INC:

    env PERL5LIB=/path/to/testing.pm perl test.pl
    
    或者使用具有不同路径的lib模块--
    使用lib qw#/path/to/testing.pm#--位于脚本的顶部。
    
    希望对您进行排序…

    您的@INC阵列中是否有
    testing.pm
    ?如果没有,您可以通过PERL5LIB环境变量发送到@INC:

    env PERL5LIB=/path/to/testing.pm perl test.pl
    
    或者使用具有不同路径的lib模块--
    使用lib qw#/path/to/testing.pm#--位于脚本的顶部。
    
    希望你…

    有多种方法可以解决这个问题。我倾向于保持crontab的简单性,并添加如下内容:

     use FindBin qw($Bin);
     use lib "$Bin/../lib";
    

    这假设库文件与perl脚本处于固定关系。该示例来自。

    有多种方法可以解决此问题。我倾向于保持crontab的简单性,并添加如下内容:

     use FindBin qw($Bin);
     use lib "$Bin/../lib";
    

    这假设库文件与perl脚本处于固定关系。示例来源于。

    这是问题的一个子集,只需一个建议
    使用strict
    @Ganesh use strict-它如何影响上的执行crontab@Rudra:不,它不会影响crontab中的执行,我只是建议使用它,因为您仅对某些变量使用
    my
    。这是问题的一个子集,只需一个建议
    use strict
    @Ganesh use strict-它如何影响上的执行crontab@Rudra:不,它不会影响crontab中的执行,我只是建议这样做,因为您仅对某些变量使用
    my
    。然后返回您的问题,编辑问题并向我们展示一些代码:您的crontab看起来如何?你的
    test.pl
    看起来怎么样?然后回到你的问题,编辑问题并向我们展示一些代码:你的crontab看起来怎么样?您的
    test.pl
    看起来怎么样?