【发布时间】:2018-11-03 12:50:40
【问题描述】:
我有这里描述的确切问题: Perl can't find module when run from cron.daily 除了我的问题适用于从 crontab 运行的 perl 脚本。
在我的情况下,错误消息是:
May 24 22:12:02 trackcam3 test_cron: Can't locate Image/Grab.pm in @INC (you may need to install the Image::Grab module) (@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/arm-linux-gnueabihf/perl5/5.24 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base) at /home/darren/upload_image.pl line 33, <DATA> line 1.
May 24 22:12:02 trackcam3 test_cron: BEGIN failed--compilation aborted at /home/darren/upload_image.pl line 33, <DATA> line 1.
链接中的解决方案都在路径中添加了一些东西。我想知道我是否可以将模块移动或复制到从 crontab 执行 perl 脚本时可以找到的地方。
作为故障排除的一部分,我已经使用与终端相同的 PATH 加载了 cron,但这还不足以让 perl 模块被发现。
缺少的模块在~/perl5/lib/perl5 中,而@INC 中没有
相同的 perl 脚本调用模块位于
/usr/lib/arm-linux-gnueabihf/perl5/5.24/Image/Magick
应该在其他地方吗?目前/usr/lib/perl5 为空。链接中的 OP 在链接中提出了相同的问题,但没有收到答案。
【问题讨论】:
-
听起来您为此使用了本地库。哪个用户正在运行 cron 作业?如果它是您自己的,它应该读取您的 bashrc 文件并选择路径。但是,如果它不是您自己的,那么它实际上不应该需要您主目录中的模块。这不是它应该寻找的地方。
-
PATH不用于查找模块。试试PERL5LIB -
我从未打算将模块加载到我的主目录中。那是安装时加载的地方。与其他人一起拥有它对我来说更有意义。我可以在不破坏我的系统的情况下移动/复制模块以与其他模块一起使用吗?如果我移动/复制文件,它们应该去哪里???我是运行 cron 作业的用户。
-
问题的根本原因是大多数模块都是作为 deb 包安装的。这些位于 /usr/ 中。几个模块与 CPAN 一起安装到用户目录中。当 perl 脚本以用户身份运行时,它们运行良好。当 cron 以用户身份运行 perl 脚本时,它们失败了,因为 perl 编译器在用户文件夹中找不到 cpan 安装的模块。我通过运行“sudo cpan module”解决了这个问题,这将模块放在 perl 可以找到它们的地方。