linux — проблема тайм-аута при запуске фонового PHP-скрипта как веб

У меня есть PHP-скрипт, который выполняет некоторые тяжелые действия, которые я пытаюсь запустить как фоновый скрипт, используя следующий код:

exec("script.php > /dev/null 2> /dev/null &");

Что просходит:

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

  • Когда я запускаю код как часть моего веб-приложения без окончательного
    амперсанд, работа работает нормально — но exec() ждет сценария
    завершите работу перед загрузкой следующей страницы, победив цель, поскольку пользователь смотрит на неотвечающую страницу.

  • Когда я запускаю команду оболочки script.php > /dev/null 2> /dev/null & как и я с консоли с последним амперсандом, работа работает нормально.

  • Когда я запускаю команду оболочки из консоли как web, задание останавливается примерно через минуту.

Я попытался передать свой вывод в лог-файлы: script.php > /home/public/tmp/output.txt 2> /home/public/tmp/errors.txt &, Вывод выглядит нормально, я не получаю никаких ошибок. Скрипт просто перестает работать.

Кажется, что основное правило таково: если он будет запущен как основной процесс, как веб или как я, он завершится. Если запустить как фоновый процесс как веб, он перестает работать примерно через минуту.

Я не запускаю это как cronjob, потому что мой хост (NearlyFreeSpeech) может запускать cronjobs только один раз в час, что больше, чем я хочу, чтобы пользователи ждали, когда задание занимает всего пару минут — оно может также сработать, когда пользователи инициировать это.

Индекс начинается с set_time_limit(60 * 60 * 4); так что это не должно зависеть от тайм-аута PHP.

0

Решение

set_time_limit

не включает время выполнения оболочки.
http://php.net/manual/en/function.set-time-limit.php

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

0

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

Других решений пока нет …

По вопросам рекламы [email protected]