【问题标题】:Why are those crontab rules not working?为什么这些 crontab 规则不起作用?
【发布时间】:2019-01-08 22:46:12
【问题描述】:

我正在尝试使用 crontab 每月的最后一天生成一些报告。

这是我的规则:

45 20 31 1,3,5,7,8,10,12 * php console make:export > /dev/null 2>&1
45 20 30 4,6,9,11 * php console make:export > /dev/null 2>&1
45 20 28 2 * php console make:export > /dev/null 2>&1
*/2 * * * * php ..cronjobs/cron_photos_tri.php >/dev/null 2>&1

但是,虽然同一个文件中的所有其他行都工作正常,但它们永远不会被触发。这是 2018 年 7 月最后一天的系统日志:

Jul 31 20:40:01 CRON[19453]: (root) CMD (php ...cronjobs/cron_photos_tri.php >/dev/null 2>&1)
Jul 31 20:42:01 CRON[19880]: (root) CMD (php ...cronjobs/cron_photos_tri.php >/dev/null 2>&1)
Jul 31 20:44:01 CRON[20248]: (root) CMD (php ...cronjobs/cron_photos_tri.php >/dev/null 2>&1)
Jul 31 20:46:01 CRON[20599]: (root) CMD (php ...cronjobs/cron_photos_tri.php >/dev/null 2>&1)

如您所见,cron_photos_tri.php 被触发,但 make:export 没有被触发。为什么?

【问题讨论】:

  • console最好使用绝对路径
  • @kerbholz:这是服务器上的绝对路径,出于阅读原因,我在代码中对其进行了简化。

标签: php linux cron debian sysadmin


【解决方案1】:

这是您在 crontab 中需要在每个月底(晚上 11:59)运行命令的内容:

  59 23 28-31 * * root [ $(date +\%d -d tomorrow) = 01 ] && executioncode

今天如何进行测试(2018-08-01 23:59 pm)

  59 22 01-03 * * root [ $(date +\%d -d tomorrow) = 02 ] && executioncode

代码将在2018-08-01 10:59 pm上执行

解释 CRON:

root [ $(date +\%d -d tomorrow) = 01 ] 表示如果明天等于 1 并且当前日期介于 28 和 31 之间,则表示该月的最后一天

【讨论】:

  • 有没有什么方法可以“尝试”这个而不用等到月底?
  • 检查我的更新它会解释如何
  • 当我在等待 14h20 进行测试时。你能告诉我为什么我的规则不起作用吗?
猜你喜欢
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多