对我的Cron工作感到困惑

时间:2011-07-26 11:57:49

标签: linux perl cron

我有一个perl脚本,我计划每分钟运行一次。 我已将cron作业设置为

* * * * * PATH= /usr/local/bin:/usr/bin:/usr/sbin:/usr/lib; perl /dm2/www/html/isos/pre5.3/autoDownload.pl 

我假设脚本每分钟都在执行,因为当我在/ var / log /

中执行cat cron时,我看到如下所示的条目
Jul 26 04:57:01 dmvbu-build crond[773]: (root) CMD (PATH= /usr/local/bin:/usr/bin:/usr/sbin:/usr/lib; perl /dm2/www/html/isos/pre5.3/autoDownload.pl)

Jul 26 04:58:01 dmvbu-build crond[687]: (root) CMD (PATH= /usr/local/bin:/usr/bin:/usr/sbin:/usr/lib; perl /dm2/www/html/isos/pre5.3/autoDownload.pl)

但我的问题是我有像

这样的陈述
print LOG "connecting to website\n"

其中LOG是名为log.txt的文件的文件描述符,该文件位于 dm2 / www / html / isos / pre5.3 /(与autoDownload.pl相同的地方)

但是在看到cron日志文件中的条目后,我没有看到这个log.txt文件用新信息更新 但是当我手动运行代码时,我看到这个文件正在更新

4 个答案:

答案 0 :(得分:2)

您必须删除=中的PATH之后的额外空格。

PATH=/usr/local/bin:/usr/bin:/usr/sbin:/usr/lib

答案 1 :(得分:1)

cron行应为

* * * * * PATH=/usr/local/bin:/usr/bin:/usr/sbin:/usr/lib perl /dm2/www/html/isos/pre5.3/autoDownload.pl

请注意=之后缺少空格,perl之前缺少分号。

答案 2 :(得分:1)

/dm2/www/html/isos/pre5.3/log.txt时提供日志文件的绝对路径(log.txt而不仅仅是open()),否则你必须确保cron的“当前工作目录”在哪里你希望它成为。

同时检查执行此命令的用户是否具有该文件的写入权限。

答案 3 :(得分:1)

当您有输出/错误时,更容易调试程序。 您还应该在脚本顶部或cron行上使用perl的绝对路径。然后你应该能够摆脱任何$PATH混乱。

# Make sure you script is executable
chmod a+x /dm2/www/html/isos/pre5.3/autoDownload.pl

尝试在您的流程上方向cron添加MAILTO行。

MAILTO="me@example.com"
* * * * * /usr/bin/perl /dm2/www/html/isos/pre5.3/autoDownload.pl

或者将cron输出记录到文件中以监视错误。通过确保脚本/usr/bin/perl的第一行来摆脱crontab中的#!/usr/bin/perl

* * * * * /dm2/www/html/isos/pre5.3/autoDownload.pl &> /tmp/autoDownload.log