CronJobs和打印输出perl

时间:2015-12-31 11:51:10

标签: perl cron

我写了一个脚本perl:

my $filename = '/root/report.txt';
open(my $fh, '>>', $filename) or die "Could not open file '$filename' $!";
print 'Hello world';
print $fh 'Hello world';
close $fh;

当我使用perl script.pl运行此脚本时,它会创建一个日志文件$ filename,并将Hello world保存在日志文件中。

但如果我使用cron作业

* * * * * perl script.pl

它无法正常工作且无法保存在report.txt中。

如何解决这个问题?

我测试了它,当我在PP上使用这个脚本时:Parcker日志没有被保存。

2 个答案:

答案 0 :(得分:1)

当我第一次开始使用cron时,我遇到了同样的问题。问题是,cron运行在一个全新的shell中,因此所有变量都消失了,包括路径。

您的cron作业是否包含perlscript.pl的完整确切路径?因为您的示例没有script.pl的路径。因为运行cron作业时不保存PATH变量。 cron作业可能没有运行但产生了错误,发送到该计算机上的电子邮件帐户。检查你的电子邮件。并在cron文件中放置MAIL=username,因此电子邮件将在计算机上运行cron作业到您的帐户。如果您的计算机支持在该计算机外部发送作业,则设置MAIL=me@othermachine.com

设置路径,在cron文件集中设置PATH=/whatever:/somewhere/else

另外,您是否使用crontab -e编辑了个人crontab文件?这通常是推荐的。请勿触摸系统crontabs。

您可以设置的另一个变量是SHELL=/bin/bash,以便为所有cron作业使用bash。

此外,Jens所说的关于使用perl和脚本的完整路径的内容。 cron作业运行时没有路径,除非你按照我上面的建议在crontab文件中设置它。

# Suggested crontab file edited with crontab -e.
# This is a crontab comment.
MAIL=me
PATH=/usr/bin:/root
SHELL=/bin/bash
* * * * * /usr/bin/perl/perl /export/home/me/script.pl

关键点:

  1. Cron运行它自己的shell,您可以使用SHELL =设置它 变量。除非您设置它们,否则您也没有变量。
  2. 每次都使用perl和脚本的完整路径。
  3. 如果产生了屏幕输出,Cron只会向您发送电子邮件 通过程序或错误消息。追踪可能很棘手 一个空白的cron电子邮件,其中唯一的输出是回车。
  4. 仅在Ubuntu上使用crontab -e编辑本地crontab文件。威力 在其他系统上有所不同。

答案 1 :(得分:0)

首先,您应该阅读您的电子邮件。 Cron给你发了一封。

接下来,了解cron启动的作业可能将您的主目录作为当前工作目录。机会是,script.pl在其他地方。 尝试使用

* * * * * * /path/to/perl /path/to/script.pl

如果crontab接受六个星号,请检查两次(通过阅读man 5 crontab)。我在FreeBSD上的实现只接受5。