使用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时, cpan和cpanm都将在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
