首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的Perl脚本在由cron运行时不能加载模块?

为什么我的Perl脚本在由cron运行时不能加载模块?
EN

Stack Overflow用户
提问于 2009-04-15 20:52:49
回答 6查看 4.7K关注 0票数 3

我有一堆Perl脚本,它们都运行得很好,但还需要有use Plibdata;

我设置了一个运行的cron作业(我收到来自root的确认电子邮件),它返回以下错误消息:

代码语言:javascript
复制
Can't locate Plibdata.pm in @INC (@INC contains: /install/lib /opt/perl58/lib/5.8.8/IA64.ARCHREV_0-thread-multi /opt/perl58/lib/5.8.8 /opt/perl58/lib/site_perl/5.8.8/IA64.ARCHREV_0-thread-multi /opt/perl58/lib/site_perl/5.8.8 /opt/perl58/lib/site_perl .) at ./x line 5.

BEGIN failed--compilation aborted at ./x line 5.

第五行是..。你猜对了..。use Plibdata;

我也尝试这样设置环境:

代码语言:javascript
复制
use lib "$ENV{CARSPATH}/install/lib";

所以,如果我找到了这个plibdata的位置,我可能会显式地将它定向到那个方向?

我的cron命令将使用/usr/bin/sh的crontabs...

有什么建议吗?

此脚本从命令行运行。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-16 16:49:48

按照其他人的建议,从包装器脚本运行您的程序可能是我首选的方法,但可能还有其他一些解决方案:

如果您使用的是现代cron,则可以在crontab条目中执行以下操作:

代码语言:javascript
复制
* * * * * CARSPATH=/opt/carsi x

将星号替换为相应的明细表指示符。

这将为x进程设置CARSPATH,并允许传递环境变量的use lib语句工作。

您还可以根据您的shell和cron实现,将您的环境设置存储在一个文件中,并执行以下操作:

代码语言:javascript
复制
* * * * * source specialenv.sh && x

其中specialenv.sh包含类似于(表示bash)的行

代码语言:javascript
复制
export CARSPATH=/opt/carsi

如果您选择直接在crontab中设置环境变量,也可以这样做。

票数 2
EN

Stack Overflow用户

发布于 2009-04-15 20:58:01

你没说Plibdata是什么。您也不需要在命令提示符下说明此操作是否有效。我假设是这样的。

试试这个:

代码语言:javascript
复制
perl -MPlibdata -e 1

假设这不会产生相同的错误,试试这个:

代码语言:javascript
复制
perl -MPlibdata -le 'print $INC{"Plibdata.pm"}'

这会告诉你在哪里。(如果可以的话,它可能在您的PERL5LIB环境变量中。)然后,您只需在Plibdata.pm所在的目录中添加适当的"use lib“即可。

此外,请确保在命令行和cron作业中使用相同的$^X (尝试在脚本顶部输入"BEGIN { print perl }“)。

票数 7
EN

Stack Overflow用户

发布于 2009-04-15 20:59:47

Cron在登录时使用与您的环境不同的用户环境。您是否能够从命令行运行该脚本?如果是这样,只需在cron中设置高于当前命令的环境变量即可。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/753670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档