使用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