1

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

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

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

我的 crontab 出了什么问题?

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

2013 年 3 月 3 日,12.55.13,CEST

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

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

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

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

这有效:

*/15 * * * * drush @site.prod 缓存预热器 --timeout=6 --hub-pages-file=/home/sergej/websites/sute/site-cache.txt http://www.site。组织

该系统似乎有几个小时的问题。

4

1 回答 1

3

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

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

这会将标准输出写入该文件(您也不需要前导009

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

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

并在执行后检查该文件。如果date有效但drush无效,那么您的问题就在cron其本身之外。

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

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

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

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

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

  • 在文件的最后一行有一个没有换行符的命令有时会导致麻烦。
  • %某个地方听从你的指挥。
  • cron守护程序以不同的时区设置启动。

最后一个有时可以通过重新启动守护程序来修复。鉴于您对不履行的奇怪性质的评论,我建议作为第一步。

于 2013-09-03T07:36:47.400 回答