为什么这些crontab规则不起作用?

时间:2018-08-01 11:20:33

标签: php linux cron debian sysadmin

我正在尝试使用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月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未被触发。为什么?

1 个答案:

答案 0 :(得分:0)

在crontab中,您需要在每个月的月底(11:59 pm)运行命令:

  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上执行

EXPLAINE CRON:

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