У меня есть PHP-скрипт, который делает некоторые тяжелый, что я пытаюсь выстрелить в качестве фонового сценария, используя следующий код:Timeout проблема при запуске фонового PHP скрипта как веб
exec("script.php > /dev/null 2> /dev/null &");
Что происходит:
Когда я запускаю код, указанный выше как часть моего веб-приложения, сценарий завершает работу примерно через минуту.
Когда я запускаю код как часть моего веб-приложения без окончательного амперсанд, работа работает нормально - но
exec()
ждет сценария к полной перед загрузкой на следующую страницу, поражение цели, как пользователь смотрит на не отвечающая страница.Когда я запускаю команду оболочки
script.php > /dev/null 2> /dev/null &
как себя из консоли с последним амперсандом, работа выполняется нормально.Когда я запустил команду оболочки с консоли в качестве веб-страницы, работа перестает работать примерно через минуту.
Я попытался подключить свой вывод к лог-файлам: script.php > /home/public/tmp/output.txt 2> /home/public/tmp/errors.txt &
. Результат выглядит нормально, я не получаю никаких ошибок. Сценарий просто перестает работать.
Основное правило выглядит следующим образом: Если вы выполняете процесс переднего плана как веб-сайт или как я, он будет завершен. Если вы выполняете фоновый процесс как web, он перестает работать примерно через минуту.
Я не запускаю это как cronjob, потому что мой хост (NearlyFreeSpeech) может запускать cronjob только один раз в час, что больше, чем я хочу, чтобы пользователи подождали, когда задание займет всего пару минут - это может быть как когда запускаются пользователи.
Нижний индекс начинается с set_time_limit(60 * 60 * 4);
, так что это не должно быть вопросом синхронизации времени PHP.
попробуйте выполнить вывод вашего вывода в файл журнала, чтобы узнать, произошла ли ошибка или что-то неожиданное. 'Script.php> /tmp/script.log 2> & 1 &' –
Пробовал это. Он просто прекращает бесцеремонно. – schnauss
60 секунд звучит подозрительно, как проблема с таймаутом ... try dumping 'phpinfo()' в ваш выходной журнал, чтобы гарантировать, что 'max_execution_time' обновляется вашим' set_time_limit() 'вызовом? (хостинговые компании могут ограничить то, что вы можете установить, чтобы предотвратить неблагоприятные последствия для других пользователей) –