#php #unix #cakephp #cron #cpanel
#php #unix #cakephp #cron #cpanel
Вопрос:
Я создаю это приложение с помощью CakePHP, который должен позволить пользователям веб-приложения планировать отправку электронных писем еженедельно или через день. Есть ли какой-либо способ для каждого пользователя иметь свои собственные задания cron? И если возможно, как этого можно достичь? Я полностью потерян.
Ответ №1:
Я предлагаю одно общее задание cron, которое выполняется часто, скажем, каждые 15 минут, которое проверяло бы базу данных на наличие всех пользовательских электронных писем, запланированных на это время или ранее, и отправляло бы их.
Вероятно, вам также нужно будет рассмотреть возможность регулирования этого, если одновременно необходимо отправлять десятки пользовательских электронных писем.
Комментарии:
1. вот как это сделать для пары тысяч пользователей.
2. Хорошо, это имеет смысл. но как пользователи собираются добавлять на вкладку cron?? Допустим example.com/emails/testusers/autosend отправляет электронные письма для тестовых пользователей о том, как они собираются добавляться на вкладку cron
3. Они не добавляют / планируют задание cron напрямую. Они добавляют / планируют что-то в приложении. Приложение запускает задания cron и проверяет их наличие.
4. @Noob Я добавил ответ с простым действием контроллера в качестве примера, пожалуйста, прочтите две ссылки в конце сообщения. Исходя из того, что вы хотите сделать, вы должны понимать, как работают консольные оболочки и задачи 😉
Ответ №2:
Отказ от ответственности: следующий код абсолютно небезопасен для запуска как есть. Пожалуйста, примите это как пример, который нельзя копировать и / или вставлять куда-либо реально. Вы были предупреждены 🙂
Пример кода CakePHP:
<?php
// ... blah blah boiler plate, action follows:
public function runscheduler(){
// you can also have: $jobs = $this->Jobs->all();
$jobs = $this->Jobs->find(array('conditions' => array('can_run_now' => true)));
foreach ( $jobs as $job ) {
// you pick the conditions yourself here, my imagination is drained
if ( $job->scheduled == time() ) {
exec( $job->command ); // huge security threat right here
}
}
// we are done, that's it, whenever crontab calls us
// next, we will take care of business
}
?>
Теперь все, что осталось, можно прочитать в TFM 🙂 Консольные задачи CakePHP и запуск консольных задач из Cron (извините, слишком устал, чтобы копировать и вставлять).
Ответ №3:
Я бы предложил создать cron, который выполняется с минимально возможным интервалом, который вы разрешите. Этот cron просмотрит всех и проверит, пришло ли их время для запуска.