【问题标题】:Cron job every day at 9:27每天 9:27 的 Cron 作业
【发布时间】:2013-09-06 08:20:39
【问题描述】:

我在使用 crontab 时遇到了一些问题。 我有这份工作:

27 09 * * * drush @ildeposito.prod 状态

我想在每天 9:27 执行 cron 作业。 但它不起作用。 如果我尝试直接在提示符下执行命令,它会起作用。

我的 crontab 出了什么问题?

如果我从 shell 执行“日期”,我会得到:

2013 年 3 月 3 日,12.55.13,CEST

如果我将日期的输出放在一个文件中,并使用一个 cron 作业,我会获得:

2013 年 9 月 3 日星期二 12:55:01 CEST

另一个:这不是在 13 日每分钟执行一次!

* 13 * * * date >>/tmp/temp_out_hour

这行得通:

*/15 * * * * drush @site.prod cache-warmer --timeout=6 --hub-pages-file=/home/sergej/websites/sute/site-cache.txt http://www.site.org

系统似乎在小时数方面存在问题。

【问题讨论】:

  • 您能否确认 crond 正在运行(ps -ef | grep cron)?是系统cron还是一些奇怪的野兽?这是在你自己的盒子上还是在主机上?这些(可能还有更多)问题将缩小范围。
  • 这是一个 VPS。 cron 正在运行,其他 cron 作业正常。
  • 好的,那么如何添加该 cron 作业? crontab -e?直接编辑?此外,* 13 * * * 作业是否执行过?您说不是每分钟,但您的意思是它少于 1/分钟,还是从未真正执行过?
  • 我使用 crontab -e。我还有其他工作。我试过 43 14 * * * 但在 14:43 工作没有开始..
  • sergio,你没有回答所有问题。那项工作有没有运行?还有一些新的:文件最后一行的故障作业是否以换行符终止?向我们展示一份确实有效的工作。

标签: crontab


【解决方案1】:

首先,您需要指定“它不起作用”的实际含义。你的意思是你看不到输出?没有收到带有输出的邮件?通常,cron 作业的标准输出将打包在电子邮件中并发送给运行作业的用户。如果您想查看作业输出的内容,可以使用以下内容:

27 9 * * * drush @ildeposito.prod status >/tmp/temp_out 2>&1

它将向该文件写入标准输出错误(您也不需要09 中的前导0)。

如果命令在 shell 提示符下运行,而不是在 cron 下运行,则通常是您的环境设置不同。您可以通过用一个非常简单的工作替换您的工作来测试这一点:

27 9 * * * date >>/tmp/temp_out

并在执行后检查该文件。如果date 有效但drush 无效,则您的问题不在cron 本身。

cron 使用最少的环境变量集启动进程,您必须确保已配置合适的集。例如,请参阅here

我们使用 /usr/bin/env 来运行 drush,这样我们就可以设置一些 drush 需要执行的必要环境变量。默认情况下,cron 将使用空 PATH 运行每个命令,这在 drush 中无法正常工作。

在终端中运行 drush 时,drush 将通过 tput 命令自动确定列数,该命令会查询活动终端以确定屏幕的宽度。从 cron 运行 drush 时,不会设置任何终端,并且对 tput 的调用会产生错误消息。虚假的错误消息是不可取的,因为 cron 通常配置为在产生任何输出时发送电子邮件,因此努力确保 cron 成功运行且没有输出是很重要的。

在某些情况下,drush 足够聪明,可以识别没有终端——例如,如果终端值为空或“哑”。但是,有些“非终结”值是 drush 无法识别的,例如“未知”。如果您手动设置 COLUMNS,则 drush 将遵循您的设置并且不会尝试调用 tput。

除此之外,还有许多其他问题可能会困扰 cron:

  • 在文件的最后一行有一个没有换行符的命令有时会导致问题。
  • 在您的命令中某处有%
  • cron 守护进程以不同的时区设置启动。

有时可以通过重新启动守护程序来修复最后一个问题。考虑到您的 cmets 对非性能的奇怪性质,我建议作为第一步。

【讨论】:

  • cron 上的其他 drush 命令有效。问题出在我们的身上。 10 * * * * drush @ildeposito.prod 状态 --- 有效
  • 但是“* 10 * * * drush @ildeposiot.prod 状态不起作用
  • @sergiod,您需要定义“有效”和“无效”的实际含义。例如,drush ib 的输出在哪里,你确定它工作的好 cron 示例去哪里了?我犹豫要问一个简单的问题,但你确定时间已经过去了吗?这就是为什么你应该首先检查 date 命令,将问题隔离到 cron 或 drush。
  • works = cron 已执行(我在 syslog 中看到)不起作用 = cron 未执行(不在 syslog 中)
  • @sergiod,用 date 命令试试,看看结果如何。系统日志并非始终可靠。
猜你喜欢
  • 2014-12-08
  • 1970-01-01
  • 2012-08-09
  • 2022-01-07
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 2013-01-20
相关资源
最近更新 更多