Cron perl脚本赢得';跑不动

Cron perl脚本赢得';跑不动,perl,cron,ubuntu-12.04,Perl,Cron,Ubuntu 12.04,我正在尝试使用cron在我的Ubuntu服务器上运行perl脚本。我有3个perl脚本: works.pl(从终端工作。作为cron作业工作) 失败。pl(从终端工作。作为cron作业失败) functions.pl(我所有的共享函数都存储在这里) 我能想到的“works.pl”和“fails.pl”之间的唯一区别是“fails.pl”使用引用“functions.pl”的require()语句Fails.pl'未引用'functions.pl' 额外信息 我的所有perl脚本都位于同一个

我正在尝试使用cron在我的Ubuntu服务器上运行perl脚本。我有3个perl脚本:

  • works.pl(从终端工作。作为cron作业工作)
  • 失败。pl(从终端工作。作为cron作业失败)
  • functions.pl(我所有的共享函数都存储在这里)
我能想到的“works.pl”和“fails.pl”之间的唯一区别是“fails.pl”使用引用“functions.pl”的require()语句Fails.pl'未引用'functions.pl'

额外信息

  • 我的所有perl脚本都位于同一个文件夹中,即 在我的公用文件夹之外
  • 我的所有perl脚本都具有相同的权限(740)
有什么想法吗?我的用户级别是新手,顺便说一句:-)


谢谢。

require
尝试在
@INC
数组中列出的一个目录中查找脚本。此数组通常包含当前目录
。因此,如果当前目录是
functions.pl
所在的目录,则运行
失败。pl
应该可以工作

有两种方法可以实现这一点:首先,在运行脚本之前更改目录,例如(cron条目示例)

其次,通过将其放在
fails.pl
的顶部,告诉Perl在编译时在哪里可以找到脚本:

BEGIN {
  unshift @INC, "/home/user/path/to/script";
};

莫里茨的回答是正确的,但我的
@INC
已经设置好了;但是,我的情况不同。我的perl程序将在CLI上运行,cron正在运行它,但它会悄悄地失败

事实证明,我有:

my $width = `tput cols`; # breaks silently if run by CRON
在我的脚本中,某个只在终端上工作的地方。我把它改成:

my $width = 160; # cron likes this

我尝试了第二种方法,效果非常好!谢谢你的回答和解释它是如何工作的。非常感谢:-)
my $width = 160; # cron likes this