我正在尝试使用cron在我的Ubuntu服务器上运行perl脚本。我有3个perl脚本:
我可以在'works.pl'和'fails.pl'之间想到的唯一区别是'fails.pl'使用引用'functions.pl'的 require()语句。 'Fails.pl'不引用'functions.pl'。
额外信息
有什么想法吗?我的用户级别是新手btw: - )
感谢。
答案 0 :(得分:3)
require
尝试在@INC
数组中列出的某个目录中查找脚本。该数组通常包含当前目录.
。因此,如果您当前的目录是functions.pl
所在的目录,则运行fails.pl
应该有效。
有两种方法可以实现这一点:首先,在运行脚本之前更改目录,例如(cron条目示例)
5 12 * * * cd /home/user/path/to/script ; ./fails.pl
其次,告诉Perl在编译时将脚本放在fails.pl
的顶部附近,在哪里找到你的脚本:
BEGIN {
unshift @INC, "/home/user/path/to/script";
};
答案 1 :(得分:0)
Moritz的回答很真实,但是我的@INC
已经正确设置了;但是,我的情况有所不同。我的perl程序将在CLI上运行,而cron正在运行,但它会以静默方式失败。
原来,我有:
my $width = `tput cols`; # breaks silently if run by CRON
在我的脚本中,某个地方只能在终端上使用。我将其更改为:
my $width = 160; # cron likes this