Это, вероятно, относительно легко для тех, кто больше любит Linux, чем я.

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

/usr/local/bin/php -r '$_COOKIE["PHPSESSID"]="cookie";$srv="server.name";$dir="/home/base/dir/";include("/home/x/public_html/newsletter/send.php");' > /home/x/public_html/newsletter_log.txt 2>&1 & echo $!

Пути были заменены на поддельные.

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

До сегодняшнего дня все работало нормально, когда пользователь должен дождаться завершения "фонового" процесса.

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

Я знаю, что использование & в конце скрипта - это ключ, но, как вы можете видеть, он есть!

Извините за этот идиотский вопрос нуб.

1 ответ1

0

Команда в порядке! В этом нет ничего плохого.

Это был гоч, который только сегодня нажал на меня.


Проблема была в том, что у меня была сессия, которую я открывал.

У меня была эта строка в PHP:

session_start();

Но я забыл закрыть его. Мое решение было похоже на это:

session_start();
$tmp = $_SESSION;
session_write_close();
$_SESSION = $tmp;
unset($tmp);

Таким образом, он создаст копию сеанса, запишет новые данные и закроет его.

Поскольку сессия не была закрыта, новые запросы на ее открытие зависали, поскольку файл был заблокирован. Закрытие это решило проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .