我写了一个脚本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日志没有被保存。
答案 0 :(得分:1)
您的cron作业是否包含perl
和script.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
关键点:
crontab -e
编辑本地crontab文件。威力
在其他系统上有所不同。答案 1 :(得分:0)
首先,您应该阅读您的电子邮件。 Cron给你发了一封。
接下来,了解cron启动的作业可能将您的主目录作为当前工作目录。机会是,script.pl
在其他地方。
尝试使用
* * * * * * /path/to/perl /path/to/script.pl
如果crontab接受六个星号,请检查两次(通过阅读man 5 crontab
)。我在FreeBSD上的实现只接受5。