如何判断我的每小时cron作业是否已运行?
我在/etc/cron.hourly
创建了一个名为ntpdate
的文件
#!/bin/sh /usr/sbin/ntpdate-debian date > /tmp/william_tmp date > /william_tmp date > ~/william_tmp echo test
我也把Chmod 755做了这个文件。
但是,我无法判断该文件是否已运行!
该文件不是在3个目录中的任何一个中创建的。
如果我手动运行cd / && run-parts --report /etc/cron.hourly
那么就会创建文件并获得echo。
任何人都可以推荐(理想情况下一步一步!)说明测试它是否正常工作?
cron的一个主要缺陷是cron在极其有限的shell环境中运行,因此很多变量都没有导出到环境中,主要是$ PATH。 确保使用所有可执行的绝对路径,包括echo
, uptime
, date
等常用function,所有这些都需要使用完整路径( /bin/echo
, /bin/date
, /usr/bin/uptime
)。 要确定可执行文件的路径,可以像这样使用which
命令: which echo
– 这将显示该工具的完整路径。
您应该查看/var/log/syslog
日志文件。 如果一个cron运行,它将有一行如下:
Jun 11 19:09:01 penguin CRON[17376]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete) Jun 11 19:17:01 penguin CRON[17799]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
有关故障排除提示,请参阅https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems
尝试将脚本的第一行(解释器)更改为:
#!/bin/bash
我在过去也遇到过环境变量和PATH问题。 在将解释器更改为bash
我的问题就消失了。
鉴于我在/etc/cron.hourly/
添加了clearme.sh
脚本
只需使用强大的egrep和awk过滤终端中的 CRON任务:
$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt
输出看起来像:
Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh) Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh) Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh) Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh) Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh) Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh) Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
逐步解释一切:
- cat / var / log / syslog – 打印系统日志
- egrep clearme – 但只选择包含文本clearme的行
- awk“{print $ 1}” – 打印出包含文本清晰度的行
- >〜/ Desktop / cronlog.txt – 将结果输出到位于Desktop目录下的文件cronlog.txt中 。
第四步是可选的。 它只会在终端而不是文件中打印结果。