我有一个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文件用新信息更新 但是当我手动运行代码时,我看到这个文件正在更新
答案 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