我如何确定我的每小时cron工作是否已完成?


26

我创建了一个名为文件ntpdate/etc/cron.hourly

#!/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,则会创建文件并得到回显。

任何人都可以推荐(最好是分步进行!)说明以测试其是否正常运行?

Answers:


25

cron的一个主要陷阱是cron在极其有限的shell环境中运行,因此许多变量没有导出到环境中,主要是$ PATH。请确保您使用的所有绝对路径的可执行文件,包括像常用功能echouptimedate,等所有需要使用完整路径(/bin/echo/bin/date/usr/bin/uptime)。要确定可执行文件的路径,可以使用如下which命令:which echo-这将向您显示该工具的完整路径。


正如在聊天中讨论的那样,非常感谢,我真的希望它能对其他人有所帮助。虽然我尝试了ntpdate的下降之路,但我习惯于Windows和echo / date只是“内置”的,我只是没有认为我需要完整的路径...学习更多有关Linux的知识,这很有意义!
wilhil 2012年

36

您应该在/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


Syslog中没有任何内容,我也看不出任何原因导致该链接失败的原因:(
wilhil 2012年

1
如果syslog(grep -i cron /var/log/syslog /var/log/syslog.1)中没有任何条目,请开始检查cron守护程序是否正在运行:ps uww -C cron应该包含一行进程。
Lekensteyn

很抱歉,您会误解,系统日志中有Cron的全部内容,与该命令无关。...我知道每小时都有一些作业在运行,我收到新的邮件警报... AFAIK,正在运行的作业正在来自crontab,cron.hourly中没有任何内容,这就是我要努力工作的地方
wilhil 2012年

2

尝试将脚本(解释器)的第一行更改为:

#!/bin/bash

我过去也遇到过环境变量和PATH问题。将口译员更改为bash我后,问题就不复存在了。


1

鉴于我已将clearme.sh脚本添加到/etc/cron.hourly/

只需使用强大的egrepawk终端中过滤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)

逐步解释一切:

  1. cat / var / log / syslog-向我显示系统日志
  2. egrep clearme-但仅选择包含文本clearme的行
  3. awk“ {print $ 1}” -将包含文本clearme的行打印给我
  4. >〜/ Desktop / cronlog.txt-将结果输出到Desktop目录中的文件cronlog.txt中

第四步是可选的。它只会在终端中打印结果,而不是文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.