如何为perl脚本设置crontab作业

时间:2012-03-24 06:56:11

标签: perl crontab

我有一个Perl脚本,我想通过cron每4小时运行一次。但不知何故,如果我通过命令行运行它,它无法通过cron执行并运行正常。以下是我在crontab中设置的命令:

perl -q /path_to_script/script.pl > /dev/null

此外,当我在命令提示符下运行此命令时,它不会执行,但是当我进入path_to_script中的叶子文件夹并执行该文件时,它运行正常。

此外,这个cron作业的日志文件将在何处创建,以便我可以查看它们?

4 个答案:

答案 0 :(得分:8)

您应该将工作目录更改为“leaf folder”。

在crontab命令中尝试:

cd /path_to_script; perl script.pl >/dev/null

WRT。日志文件。 Cron会邮寄给你输出。但是,由于您已将stdout发送到/ dev / null,因此只会将stderr邮寄给您。

如果希望将输出保存在日志文件中,则将脚本的stderr / stdout输出传递到文件中,如下所示:

cd /path_to_script; perl script.pl 2>&1 >my_log_file

答案 1 :(得分:2)

通常 cron 会向您发送包含程序输出的邮件。当你搞清楚时,你可能想要检查一下环境。它不一定是与您的登录shell相同的环境(因为它不是登录shell):

 foreach my $key ( keys %ENV ) {
     printf "$key: $$ENV{$key}\n";
     }

如果您遗失了所需的内容,请在crontab中进行设置:

 SOME_VAR=some_value
 HOME=/Users/Buster

如果您需要在特定目录中开始,那么您应该chdir。来自cron作业的起始目录可能不是您认为的那样。如果没有参数,chdir会更改您的主目录。但是,有时候这些环境变量可能没有在你的cron会话中设置,所以最好有一个默认值:

 chdir( $ENV{HOME} || '/Users/Buster' );

在各个关键点,您应该提供错误输出。即使在非 cron 程序中,这也是一件好事:

 open my $fh, '<', $some_file or die "Didn't find the file I was expecting: $!";

如果您将内容重定向到 / dev / null ,则会丢失可能有助于您解决问题的所有信息。

答案 2 :(得分:-1)

看起来你可能错过了

#!/usr/bin/perl

在perl脚本的开头,这就是为什么你可能需要perl -q来运行它 添加该行后,可以使用

直接从命令行运行该行
/path_to_script/script.pl

答案 3 :(得分:-3)

如果您在perl程序中使用命令,我建议您在程序中放置命令的完整路径。

我尝试加载环境,但没有更多帮助。

在与一位同事监督之后,我认为这是来自perl与系统环境之间的互动。

祝你好运, Moustapha Kourouma