我在使用crontab时遇到了一些问题。 我有这份工作:
27 09 * * * drush @ ildeposito.prod status
我想每天9点27分执行cron工作。 但它不起作用。 如果我尝试在提示符中直接执行命令,则可以正常工作。
我的crontab出了什么问题?
如果我从shell执行“date”,我获得:
3月3日设置2013年,12.55.13,CEST
如果我将date的输出放在一个带有cron作业的文件中,我会得到:
Tue Sep 3 12:55:01 CEST 2013
另一个:这不会在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
系统似乎有几个小时的问题。
答案 0 :(得分:3)
首先,您需要指定“它不起作用”的实际含义。你的意思是你没有看到输出?没有邮件发送给你输出?通常,cron
作业的标准输出将打包在一封电子邮件中,并发送给运行该作业的用户。如果要查看作业输出的内容,可以使用以下内容:
27 9 * * * drush @ildeposito.prod status >/tmp/temp_out 2>&1
会将标准输出写入该文件的错误(您也 } 0
中的前导09
。
如果命令在shell提示符下工作而不是从cron
起作用,则通常在您的环境设置中有所不同。你可以用一个非常简单的工作替换你的工作来测试这个:
27 9 * * * date >>/tmp/temp_out
并在执行后检查该文件。如果date
有效但drush
没有,则问题出在cron
之外。
cron
使用一组最小的环境变量启动进程,您必须确保已配置合适的集合。例如,请参阅here:
我们使用/ usr / bin / env来运行drush,以便我们可以设置一些需要执行的必要环境变量。默认情况下,cron将使用空PATH运行每个命令,这对于drush来说效果不佳。
当在终端中运行drush时,将通过tush命令自动检测列数,tput命令查询活动终端以确定屏幕的宽度。当从cron运行drush时,将不会有任何终端设置,并且对tput的调用将产生错误消息。由于cron通常被配置为在产生任何输出时发送电子邮件,所以不推荐使用Spurrious错误消息,因此必须努力确保cron的成功运行完成且没有输出。
在某些情况下,例如,drush足够聪明,可以识别出没有终端 - 如果终端值为空或“哑”。但是,有一些“非终端”值,匆忙无法识别,例如“未知”。如果您手动设置COLUMNS,则drush将检查您的设置,并且不会尝试调用tput。
除此之外,还有许多其他可能困扰cron的问题:
%
。cron
守护进程以不同的时区设置开始。有时可以通过重新启动守护进程来修复最后一个。鉴于您对不履行的奇异性质的评论,我建议作为第一步。