php exec без ожидания ответа

Команда php exec (или аналогичная), чтобы не ждать результата

У меня есть команда, которую я хочу выполнить, но я не хочу, чтобы PHP сидел и ждал результата.

Возможно ли, чтобы PHP не ждал результата … то есть просто включите его и перейдите к следующей команде.

Я не могу ничего найти, и не уверен, что это даже возможно. Лучшее, что я мог найти, это кто-то, кто делал бы CRON, чтобы начать работу через минуту

Решение

Для того, чтобы выполнить команду, пусть она не повесит ваш php скрипт
он запускается, программа, которую вы запускаете, не должна выводиться обратно в php. Сделать это,
перенаправьте как stdout, так и stderr в / dev / null, затем добавьте фон.

Для того, чтобы выполнить команду и иметь
это породило еще один процесс, который
не зависит от потока Apache
продолжать бежать (не умрет, если
кто-то отменяет страницу) запустите это:

Другие решения

Вы можете запустить команду в фоновом режиме, добавив & в конце этого как:

Но выполнение этого в одиночку повесит ваш скрипт, потому что:

Если программа запускается с функцией exec, чтобы она продолжала работать в фоновом режиме, выходные данные программы должны быть перенаправлены в файл или другой поток вывода. В противном случае PHP будет зависать до тех пор, пока не закончится выполнение программы.

Таким образом, вы можете перенаправить стандартный вывод команды в файл, если вы хотите увидеть его позже или /dev/null если вы хотите отменить это как:

Это использует wget для уведомления URL-адреса чего-либо без ожидания.

Это использует ls для обновления журнала без ожидания.

«Exec поЬир setsid your_command «

поЬир позволяет your_command продолжить, даже если запущенный процесс может прерваться первым. Если это так, сигнал SIGNUP будет отправлен на your_command, что приведет к его завершению (если только он не перехватит этот сигнал и не проигнорирует его).

Есть два возможных способа его реализации.
Самый простой способ — это прямой результат для dev / null

Но если у вас есть какие-либо другие операции, вы можете рассмотреть ignore_user_abort
В этом случае скрипт будет работать даже после закрытия соединения.

Источник

Запуск из одного PHP скрипта другого, не дожидаясь его завершения

Добрый день. Имеется php скрипт registratot.php и calculate.php.

Как мне вызывать выполнение calculate.php в registrator.php. При этом registrator.php не должен дожидаться окончания выполнения calculate.php.

Другими слова, один сервер посылает на мой сервер запрос. Мне дается 10 секунд на то, чтобы вернуть строку «ok». Но, перед тем как вернуть эту строку, выполняется один скрипт, который может затянуться до 15-20 секунд. Хочу запускать этот скрипт в фоновом режиме, не дожидаясь окончания выполнения, отправлять «ok».

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Запуск внешнего скрипта и ожидание его завершения
поможите советом, а лучше кодом )) мне нужно запустив скрипт (VBS) отследить его PID в процессах и.

php exec без ожидания ответа. Смотреть фото php exec без ожидания ответа. Смотреть картинку php exec без ожидания ответа. Картинка про php exec без ожидания ответа. Фото php exec без ожидания ответаЗапуск одного скрипта из другого
Какими кодами активируются скрипты в VBS? Есть скрипты, нужно чтобы эти файлы запускались другим.

Запуск одного скрипта из другого
Всем привет! Возникла интересная проблема. Мой скрипт содержит цикл, в котором должен вызываться.

Запуск одного скрипта из другого
Понимаю, что из названия темы мало, что понятно. Постараюсь объяснить на примере. Ситуация такая.

Запустите задачу в фоне с помощью exec.

Добавлено через 53 секунды
Т.е. вместо include запустите скрипт с помощью Linux-команды.

Ну тогда у меня проблемой будет, то что придется долго ждать ответ. В частности у меня это необходимо для бота. На сообщение он должен реагировать как можно быстрее (считать, выполнять какую-либо функцию).

Скрипт стоял на кроне, выполняясь каждую минуту, тем самым чтобы дождаться ответа нужно было дождаться начала следующей минуты. Пытался ускорить ответ следующим образом (имитировал крон на каждые пол секунды):

CRON можно не использовать. Для системы очередей, как правило, используется daemon (только нужно следить за его состоянием, чтобы перезапускался, если умирает; есть специальные программы для этого).

Добавлено через 2 минуты

По поводу unsleep, да это тут ошибся при написании.

Решение

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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Запуск скрипта для анализа папки и запуска другого скрипта
Мне нужно написать скрипт, который каждую секунду (или 5 сек) сканировал определенную папку на.

Как из одного скрипта изменить переменную (int) другого скрипта?
У меня есть два скрипта (money который отвечает за общее количество денег и CarBuy который отвечает.

php exec без ожидания ответа. Смотреть фото php exec без ожидания ответа. Смотреть картинку php exec без ожидания ответа. Картинка про php exec без ожидания ответа. Фото php exec без ожидания ответаЗапуск скрипта после завершения торрента transmission на Ubuntu Server 16.04
Здравствуйте! Суть вопроса: На домашнем Nas под управлением Ubuntu Server 16.04 установлен и.

Источник

Проблемы «долгих» скриптов PHP

Внешний таймаут

В первую очередь нужно установить подходящее значение параметра max_execution_time в конфиге PHP.

Веб-сервер может также проксировать запросы на другой веб-сервер, который и запустит PHP скрипт (не редкий пример, nginx — фронтенд, apache — бэкэнд). В этом случае на проксирующем веб-сервере необходимо также настраивать таймаут проксирования. Для apache ProxyTimeout, для nginx proxy_read_timeout.

Прерывание пользователем

Если скрипт запускается в ответ на HTTP-запрос, то пользователь может остановить выполнение запроса в своем браузере, в этом случае прекратит свою работу и PHP скрипт. Если же требуется, чтобы скрипт продолжил свою работу даже после остановки запроса, установите в TRUE параметр ignore_user_abort в конфиге PHP.

Потеря открытых соединений

В таких случаях следует в первую очередь попробовать увеличить таймаут соединения. Например, для MySQL можно выполнить запрос (спасибо Snowly)

Параллельный запуск

В таких случаях можно использовать блокировку используемых ресурсов, но эта задача всегда решается индивидуально. Либо можно просто проверять, не запущена ли другая копия этого скрипта, и либо подождать завершения его работы, либо завершить текущий запуск. Для этого можно просматривать список запущенных процессов, либо использовать блокировку запуска самого скрипта, что то вроде:

Нагрузка на веб-сервер

В случаях, когда долгие скрипты запускаются через веб-сервер, соединение клиента с этим самым веб-сервером остается открытым до тех пор, пока не отработает скрипт. Это не есть хорошо, т.к. задача веб-сервера как можно быстрее обработать запрос и отдать результат. Если же соединение остается висеть, то один из воркеров (процессов) веб-сервера на долгое время будет занят. А если одновременно будет запущено достаточно много таких скриптов, то они могут занять все (ну или почти все) свободные воркеры (для apache см. MaxClients), и веб-сервер просто не сможет обрабатывать другие запросы.

Поэтому следует при обработке запроса пользователя, запускать скрипт в фоновом режиме через php-cli, чтобы не нагружать веб-сервер, а пользователю отвечать что его запрос обрабатывается. При необходимости можно периодически проверять состояние обработки при помощи AJAX запросов.

Вот, пожалуй, и все что я могу рассказать по этой теме. Надеюсь, для кого-то будет полезным.

Источник

Yii Framework

Как запустить консольную команду exec и не ждать завершения

Как запустить консольную команду exec и не ждать завершения

Сообщение victorko » 2015.12.09, 14:53

php exec без ожидания ответа. Смотреть фото php exec без ожидания ответа. Смотреть картинку php exec без ожидания ответа. Картинка про php exec без ожидания ответа. Фото php exec без ожидания ответа

Re: Как запустить консольную команду exec и не ждать завершения

Сообщение rugabarbo » 2015.12.09, 15:03

Re: Как запустить консольную команду exec и не ждать завершения

Сообщение victorko » 2015.12.09, 15:40

php exec без ожидания ответа. Смотреть фото php exec без ожидания ответа. Смотреть картинку php exec без ожидания ответа. Картинка про php exec без ожидания ответа. Фото php exec без ожидания ответа

Re: Как запустить консольную команду exec и не ждать завершения

Сообщение rugabarbo » 2015.12.09, 16:17

Re: Как запустить консольную команду exec и не ждать завершения

Сообщение victorko » 2015.12.09, 16:32

попробую,
вот такая строка отрабатывает правильно:
exec(«php /var/www/html/TestPhp/test.php >>/var/www/html/TestPhp/script.log 2>&1 &»);

а эта нет:
exec(«php /var/www/html/TestPhp/test.php &»);

php exec без ожидания ответа. Смотреть фото php exec без ожидания ответа. Смотреть картинку php exec без ожидания ответа. Картинка про php exec без ожидания ответа. Фото php exec без ожидания ответа

Re: Как запустить консольную команду exec и не ждать завершения

Сообщение rugabarbo » 2015.12.09, 16:41

Re: Как запустить консольную команду exec и не ждать завершения

Сообщение victorko » 2015.12.09, 16:47

Источник

PHP: запуск задачи в фоне

Какие самые правильные и надежные подходы стоит использовать, если необходимо запустить некую длительную задачу в фоновом режиме?
Приведу пример, чтобы стало понятней:
есть основной php скрипт, контроллер, который обрабатывает пользовательские действия. Пользователь нажимает в интерфейсе волшебную кнопку, которая должна запустить долгоиграющую задачу и вернуть управление пользователю. При этом не требуется возвращать или как то дополнительно обрабатывать результат работы длительного скрипта.

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

php exec без ожидания ответа. Смотреть фото php exec без ожидания ответа. Смотреть картинку php exec без ожидания ответа. Картинка про php exec без ожидания ответа. Фото php exec без ожидания ответа

По-моему, в вашем случае самым простым вариантом будет exec:

К сожалению это будет работать только в *nix, потому что в Windows запустить процесс в фоне не так то просто

php exec без ожидания ответа. Смотреть фото php exec без ожидания ответа. Смотреть картинку php exec без ожидания ответа. Картинка про php exec без ожидания ответа. Фото php exec без ожидания ответа

php exec без ожидания ответа. Смотреть фото php exec без ожидания ответа. Смотреть картинку php exec без ожидания ответа. Картинка про php exec без ожидания ответа. Фото php exec без ожидания ответа

PHP CLI в фоне ведет себя плохо. Из того, что применяется «на скорую руку», хорошо себя ведут BASH, Perl и Python.

В задаче, где надо было беречь ресурсы, поступил так:
1. Скрипт на PHP сохраняет «задание» на BASH в некоторую директорию job
2. Крон ежеминутно запускает некий скрипт dispatcher, написанный на Perl (был жизнеспособный вариант и на BASH) который ищет N самых старых (по last modified time) скриптов из директории job, и запускает их.
3. Запускаемые скрипты первым делом уничтожают (rm) себя, чтобы не Они все равно выполнятся — ведь они уже загружены в ОЗУ. Результаты работы сохраняются в ФС или в БД, для обслуживания логики интерфейса

Число N для каждого конкретного сервера выявляется индивидуально — тестированием.

Был «подводный камень», который по первому разу даже был обнаружен совершенно невовремя — все, что запускает крон, должно работать с абсолютными путями.

Таким образом были сделаны проект вроде ютуба и аналогичный, тоже конвертирующий видео.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *