Ответ 1
PHP exec будет ждать завершения выполнения вызываемой программы до обработки следующей строки, если вы не используете и не используете конец строки для запуска программы в фоновом режиме.
Мне нужно запустить несколько сценариев (5 скриптов) через cmd, я хочу убедиться, что до тех пор, пока первый script не завершит второй, не должен запускаться. Таким образом, после первого завершения script, тогда только второй должен быть третьим и т.д. В настоящее время я использую следующий код для этого
exec ("php phpscript1.php ");
exec ("php phpscript2.php ");
exec ("php phpscript3.php ");
exec ("php phpscript4.php ");
exec ("php phpscript5.php ");
Я думаю, что эти скрипты выполняются асинхронно, любые предложения, чтобы эти сценарии можно запускать синхронно.
PHP exec будет ждать завершения выполнения вызываемой программы до обработки следующей строки, если вы не используете и не используете конец строки для запуска программы в фоновом режиме.
Если я прав, вы выполняете php-скрипты из php script.
Обычно php ожидает завершения выполнения exec ("php phpscript1.php");
до обработки следующей строки.
Чтобы этого избежать, просто перенаправьте вывод на /dev/null
или файл и запустите его в фоновом режиме.
Например: exec ("php phpscript1.php >/dev/null 2>&1 &");
.
Ознакомьтесь с exec синтаксисом функции на php.net.
Вы увидите, что exec
не выполняет асинхронно по умолчанию.
exec
имеет два других параметра. Третий, return_var
может дать вам подсказку, если успешно запущен script или любое исключение. Вы можете использовать эту переменную, чтобы проверить, можете ли вы запускать последующие скрипты.
Протестируйте его и сообщите нам, если он сработает для вас.
На мой взгляд, было бы лучше запустить cronjobs. Они будут выполняться синхронно. Если задача "на лету", вы можете выполнить команду, чтобы добавить этот cronjob. Дополнительная информация о cronjobs: http://unixgeeks.org/security/newbie/unix/cron-1.html
http://service.futurequest.net/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=30