Может ли каждый пользователь выполнять задания cron без использования веб-сайта Cpanel?

#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 просмотрит всех и проверит, пришло ли их время для запуска.