@prolige

Как запустить несколько php скриптов одновременно?

Привет всем, помогите пожалуйста.
Есть index.php - он может выполняться и 10 минут и 20 минут.

нужно скрипт index.php запустить несколько раз одновременно из другого скрипта micro.php, но к примеру цикл while
и выражение include дожидается выполнения скрипта index.php, а нужно сразу несколько процессов index.php одновременно запустить.

запуск нескольких iframe хоть и работает, но не подходит для этого.
  • Вопрос задан
  • 1393 просмотра
Решения вопроса 1
@prolige Автор вопроса
Вопрос решил сам, чтобы запустить много процессов php в windows при помощи батника, одна строка - один запуск скрипта.
start /B E:\php\PHP_7.2\php.exe -f E:\http\index.php
start /B E:\php\PHP_7.2\php.exe -f E:\http\index.php
start /B E:\php\PHP_7.2\php.exe -f E:\http\index.php

В линуксе проще:
$num_rows = 3; //кол-во запусков скрипта
for ($i = 0; $i < $num_rows; $i++) {
shell_exec("php index.php > /dev/null &");
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
profesor08
@profesor08 Куратор тега PHP
Запусти несколько пхп процессов.
Ответ написан
Комментировать
@Vitsliputsli
А в чем сложность? В php целый ворох команд, типа exec, для запуска внешних приложений. Используйте их.
Хотя скорее всего этого и не нужно, но без описания задачи не угадаешь.
Ответ написан
Комментировать
@rPman
С точки зрения нейминга пакетов в OS, php бывает php-cli и просто php. Первый - для запуска из коммандной строки или службы, т.е. просто как скриптовый язык (кстати жутко удобный, имхо удобнее bash, и самый быстрый из существующих в принципе, рядом с ним идет node js но он не такой удобный), второй - для работы web бакэнда.

По факту это один и тот же бинарник но когда запускаешь приложение из командной строки, настройки php.ini берутся из другого каталога (смотреть /etc/php/...).

Можно внутри php файла не указывать <?php но в начале указать по стандарту #!/usr/bin/php и тогда скрипт будет запускаться как любое другое приложение (нужен флаг x на файле) либо использовать <?php и запускать
php файл.php
Второй вариант мне нравится больше, потому что редакторы ide для php чаще ожидают второй вариант а при первом не включают подсветку синтаксиса.

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

Т.е. вам нужны механизмы запуска вашего скрипта в виде службы (или хотя бы пока просто скриптом вручную, я видел примеры когда запускали автоматически внутри screen чтобы можно было мониторить активность простым подключением по ssh), плюс механизмы организации задач в виде списков (самое простое в базе данных) и инструменты нотификации об изменении статуса каждой (окончание или ошибка), например нужно же клиенту сообщить о том что работа завершена (при правильной реализации для этого пользуются websocket)
Ответ написан
Комментировать
Drilled-prog
@Drilled-prog
Программирую на ['php', 'js']
https://amphp.org/ посмотри, много разных фич имеется в этой штуке
Ответ написан
Комментировать
Newto
@Newto
function sendPostInstant(string $url, string $postfields)
    {
        $ch = self::init();
        
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
        curl_exec($ch);
        
        self::close($ch);
    }
$result = sendPostInstant('путь к вашему скрипту', '');

Этот код запустит ваш скрипт столько раз, сколько вы вызовите sendPostInstant('путь к вашему скрипту', '').
А в $result будет результат выполнения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы