Этого можно достичь, запустив команду в вашем shell_exec в фоновом режиме.Это позволяет вашему PHP-процессу продолжаться без ожидания вывода shell_exec.
Пример:
shell_exec('php /var/www/html/my_php_app.php > /dev/null 2>/dev/null &');
Часть /dev/null 2>/dev/null
сообщает bash об отправке вывода в ноль / ничего.(Нет вывода)
&
указывает bash запустить скрипт / команду в фоновом режиме.(Вы даже можете сделать это в обычном терминале ssh / bash!)
Обратите внимание, что вполне возможно, что ваш фоновый скрипт теперь может запускаться более одного раза за раз.
Если вы не хотите этого (только один экземпляр за раз), вы можете использовать файлы pid / lock.Вот пример того, что вы можете использовать в верхней части вашего php-скрипта, который вызывает shell_exec.
$lock_file = fopen('/var/www/html/my_php_app.pid', 'c');
$got_lock = flock($lock_file, LOCK_EX | LOCK_NB, $wouldblock);
if ($lock_file === false || (!$got_lock && !$wouldblock)) {
throw new Exception(
"Unexpected error opening or locking lock file. Perhaps you " .
"don't have permission to write to the lock file or its " .
"containing directory?"
);
}
else if (!$got_lock && $wouldblock) {
exit("Another instance is already running; terminating.\n");
}
//Continue with the script.