Cron perl脚本不会运行

时间:2012-08-26 14:29:48

标签: perl cron ubuntu-12.04

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

  • works.pl (从终端工作。作为cron工作)
  • fails.pl (从终端工作。作为cron工作失败)
  • functions.pl (我所有的共享功能都存储在此处)

我可以在'works.pl'和'fails.pl'之间想到的唯一区别是'fails.pl'使用引用'functions.pl'的 require()语句。 'Fails.pl'不引用'functions.pl'。

额外信息

  • 我的所有perl脚本都位于同一个文件夹中 在我的公共文件夹之外。
  • 我的所有perl脚本都具有相同的权限(740)。

有什么想法吗?我的用户级别是新手btw: - )

感谢。

2 个答案:

答案 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