У меня есть консольная программа, которая запускается, только если текущий день — воскресенье, и устанавливаю целевую дату (дату завершения) для этой программы в следующее воскресенье. Теперь я хочу сделать программу, которая запускается раз в неделю, и установить целевую дату для этой программы после 7 дней. Например, я запускаю программу в понедельник, тогда целевая дата должна быть в следующий понедельник, если она выполняется во вторник, тогда целевая дата должна быть в следующий вторник и так далее.
$sunday = Date("D");
if($sunday == 'Sun') {
remaining function
}
У меня есть эта логика для моей первой программы. Я использую эту программу в CakePhp Console (Shell). Любая помощь для второй?
Спасибо
Использовать at
команда. Это малоизвестный двоюродный брат cron
, Это позволяет вам выполнить команду один раз в указанную дату и время, которые могут быть годами.
Из вашего описания я понимаю, что вы хотите выполнить скрипт в любое время, а затем запустить его снова через 7 дней. Это означает, что ваш PHP-скрипт должен будет сам запланировать запуск снова. at
может занять абсолютное время или приращение:
at -f /bin/ls now +7 days
Попытка вывести каталог, содержащий список через 7 дней (который, вероятно, окажется в / dev / null, но это другой вопрос). Вам следует заменить / bin / ls на полный путь вашего PHP-скрипта и выполнить at
команда из вызова system () (она не является частью самого PHP). Это немного запутанно, но вы можете быть уверены, что скрипт будет выполнен даже после перезагрузки. Конечно, сценарий снова перенесет себя, если вы не примете контрмеры …
Когда скрипт выполняется через 7 дней, его выходные данные не будут видны, поэтому убедитесь, что вы либо перенаправили выходные данные, либо записали их в журнал.
Других решений пока нет …