Что использовать для запуска PHP-скрипта для нескольких пользователей? - PullRequest
0 голосов
/ 30 января 2019

Я получил некоторый код в php скрипте (example.php).Этот скрипт выполняется около 30-60 секунд и выполняет некоторые действия для одного пользователя.

Example.php запускает atm только для 1 данного пользователя, каков наилучший способ зацикливания таблицы моих пользователей и запуска этого сценария для каждого из них?

Сценарий теперь вызывается каждые ~ 5 минут, он должен оставаться прежним, ожидайте, что он должен быть запущен для каждого пользователя.

Я запускаю PHP7.2 на своем веб-сервере и уже пробовалс cronjobs.Это работает, но только для одного пользователя с жестким кодом.Если бы я включил цикл для всех пользователей в этот один скрипт, время выполнения было бы огромным.Я пытался установить pthreads на plesk, но это также немного сложнее.

Как уже говорилось, это работает уже для одного пользователя, но я не знаю, как лучше всего запустить его для всех пользователей.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

В настоящее время, когда мне нужно запустить много PHP-скриптов в Parallell, я использую систему очередей, такую ​​как Бернард . С одной стороны, у вас будет скрипт запуска, который будет помещать задачи в очередь (реализованный, например,на сервере Redis).Это то, что будет сделано с помощью cron.Каждые 5 минут будет вызываться сценарий запуска, который будет выдвигать одно задание на пользователя в очередь, так как вы можете выдвигать параметры в очередь, вы можете задавать задание с пользователем в качестве параметра.

С другой стороныЕсли у вас столько слушателей, сколько вы хотите, процессы слушателя могут управляться, например, monit .Эти слушатели ждут, когда задача будет обработана из очереди независимо, всякий раз, когда они находят задачу, которую могут выполнить, они выполняют ее так, чтобы вы могли выполнять столько задач одновременно, сколько пожелаете.

Реализациято, что вы делаете в данный момент с вашим пользователем, - это то, что написано в коде слушателя.Это просто простой способ объяснить все, я призываю вас прочитать документацию Бернарда , это было бы намного понятнее.

0 голосов
/ 30 января 2019

вы можете использовать shell_exec для выполнения php-файла с различными user_id в качестве параметра.

shell_exec("/path/to/php /path/to/example.php '".$user_id."' 'alert' >> /path/to/your_log/result.log &");

символ & важен, потому что он сообщает серверучтобы запустить этот процесс в фоновом режиме.

ИЛИ

Вы можете реализовать некоторую систему очередей и выдвинуть задание в качестве фонового процесса.

Надеюсь, это поможет.

0 голосов
/ 30 января 2019

Мое решение состояло бы в том, чтобы перебрать всех ваших пользователей и вызвать функцию из цикла, но если вы скажете, что это занимает много времени, я не вижу способа ускорить его

Я неЯ думаю, что есть способ провести пользователя через cronjob.у вас есть фрагмент кода для нас, чтобы посмотреть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...