Я пытаюсь создать отчет каждый последний день месяца с помощью 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
Но, хотя все остальные строки в одном и том же файле работают нормально, они никогда не запускаются. Вот системные журналы за последний день 07/2018:
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. Зачем ?
Вот что вам нужно в crontab для запуска команды в конце каждого месяца (11:59 вечера):
59 23 28-31 * * root [ $(date +\%d -d tomorrow) = 01 ] && executioncode
Как сделать тест на сегодня (2018-08-01 23:59 вечера)
59 22 01-03 * * root [ $(date +\%d -d tomorrow) = 02 ] && executioncode
Код будет выполнен на 2018-08-01 10:59 pm
ОБЪЯСНИТЕ КРОН:
root [ $(date +\%d -d tomorrow) = 01 ]
означает, что если завтра равно 1, а текущий день находится между 28 и 31, то среднее значение означает последний день месяца
Других решений пока нет …