使用Perlbrew时,从crontab运行Perl脚本

我尝试了以下方法并找到它。 这是由非特权用户完成的。 首先找出你的perl命令在哪里:

# which perl

然后检查PERL5LIB的值:

# echo $PERL5LIB

然后,在用户的crontab文件中,执行如下操作:

MAILTO=<my email address for the jobs output>
HOME=/home/myhome
PERL5LIB=/home/myhome/perl5/lib/perl5

0 2 * * * $HOME/<rest of path to perl>/perl $HOME/<path to my perl script> arg1 ...

这将在凌晨2点运行,似乎正确地找到所有的Perl库。 我的问题是:这是完整和便携? 有没有更好的办法?

我已经看到了许多bash和perl脚本,这些脚本应该为执行Perl脚本准备环境,但这似乎就足够了。 任何建议将受到欢迎!

编辑 :从评论到问题,似乎我正在使用Perlbrew和local::lib的“坏”混合。 确保库安装在特定Perlbrew版本中的方法在此处得到解答:如何在使用perlbrew时安装CPAN模块? 当你使用local::lib时, cpancpanm都将在PERL5LIB下安装,除非你明确地告诉他们不要这样做。 此外, cpanm似乎更适合与Perlbrew一起工作。


脚本的shebang( #! )行应该指向要运行的( perlbrew installed) perl 。 (这应该作为安装脚本的一部分来完成。)这就是你需要的。

0 2 * * * /path/to/script arg1 ...

如果您已经有管理的多个perl的安装perlbrew最简单的方法是只使用perlbrew exec运行脚本。 -q--with选项允许您沉默多余的输出并选择特定版本的perl来运行脚本/作业。 试试像这样:

  • perlbrew exec perl -E 'say "Hello from $]n"' (这将显示perl的旧版本( < 5.10 )没有默认启用-E开关的错误)。
  • perlbrew exec -q --with 5.26.1 perl -E 'say "Hello from $]n"' (这将运行命令并禁止信息输出)。
  • perlbrew exec -q --with 5.26.1 perl ~/script_from_heaven.pl (使用perl版本请求运行脚本)。
  • perlbrew exec -q --with 5.26.1 ~/script_from_heaven.pl (在脚本的shebang行中使用请求的perl版本或硬编码运行脚本)。
  • 我倾向于明确地设置PERL5LIB并且只在需要它们的时候使用local::lib ,或者在某些特定的用户或环境中,我将所有CPAN模块安装在$HOME/perl5/lib/perl5 (完整的应用程序部署)。 否则,我发现从perlbrew运行perl非常方便。


    我发现了一些有用的东西 :为perlbrew环境设置一个alias ,以便为特定用途保持稳定,这可以成为管理多个perls的有效方式:

     ~/$ perlbrew alias create perl-5.24.0 stable-cronperl
     ~/$ perlbrew list
     perl-5.8.9
     perl-5.10.1
     perl-5.24.0
     cperl-cperl-5.26.1
     stable-cronperl (5.24.0)
     perl-5.26.1
    

    注意 :不过,别名只能作为稳定的#!有用/可用#! 如果你想让它们成为可执行文件,你可以在脚本的顶部使用shebang锚点:

    #!/home/cronic/perl5/perlbrew/perls/stable-cronperl/bin/perl
    

    您不能使用--with例如,来引用别名:

    perlbrew exec --with stable-cronperl ~/smart_comments.pl

    将此报告为文档问题或错误列在我的待办事项列表中。

    链接地址: http://www.djcxy.com/p/40877.html

    上一篇: Running a Perl script from crontab when you use Perlbrew

    下一篇: Uniform sampling of intersection area of two disks