【发布时间】:2018-05-07 13:22:41
【问题描述】:
我尝试了以下方法并发现它可以工作。这是由非特权用户完成的。首先找出你的 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 脚本准备环境,但这似乎就足够了。欢迎任何建议!
编辑:从 cmets 到问题,似乎我正在使用 Perlbrew 和 local::lib 的“坏”混合物。确保在特定 Perlbrew 版本中安装库的方法在这里得到解答:How do I install CPAN modules while using perlbrew?。当您使用local::lib 时,cpan 和cpanm 都将安装在PERL5LIB 下,除非您明确告诉他们不这样做。此外,cpanm 似乎更适合与 Perlbrew 一起工作。
【问题讨论】:
-
查看并阅读有关Ubic 的信息。对于您的用例来说,这肯定是一种矫枉过正,但您可以得到一些想法......
-
你应该能够运行类似 `bash 'perlbrew use perl-5.28.0; perl $HOME/
' 来自 cron。这将为该子 shell 选择一个特定的 Perl 并自动设置所有内容。 -
@simbabque 除了
perlbrew use似乎执行到一个新的 shell 中,所以你需要将命令输入它:perlbrew use perl-5.26 <<<'perl ./some-script.pl'(Bash 语法)。perlbrew exec --with perl-5.26 'perl ./some-script.pl'是等价的,但在输出之前会打印一个烦人的标题。 -
将 local::lib 与
perlbrew一起使用没有多大意义,因此您不应该设置PERL5LIB。 -
@amon, Re“除了 perlbrew 使用似乎执行到一个新的 shell,”,如果你有 perlbrew 正确设置,则不是。在 shell 启动时有一个文件需要为
sourced。您正在描述未完成时的备份行为。