Как выполнять команды оболочки синхронно в PHP

Мне нужно запустить несколько сценариев (5 скриптов) через cmd, я хочу убедиться, что до тех пор, пока первый скрипт не завершит второй, не следует инициировать. Таким образом, после завершения первого скрипта только второй должен быть третьим и т. Д. В настоящее время я использую следующий код для этого

exec ("php phpscript1.php "); exec ("php phpscript2.php "); exec ("php phpscript3.php "); exec ("php phpscript4.php "); exec ("php phpscript5.php "); 

Я думаю, что эти скрипты выполняются асинхронно, любые предложения, чтобы эти сценарии можно запускать синхронно.

PHP exec будет ждать завершения выполнения вызываемой программы, прежде чем обрабатывать следующую строку, если вы не используете & в конце строки для запуска программы в фоновом режиме.

Если я получу вас правильно, вы выполняете скрипты php из PHP-скрипта.

Обычно php ожидает выполнения exec ("php phpscript1.php"); до завершения обработки следующей строки.

Чтобы этого избежать, просто перенаправьте вывод в /dev/null или файл и запустите его в фоновом режиме.

Например: exec ("php phpscript1.php >/dev/null 2>&1 &"); ,

Проверьте синтаксис функции exec на php.net. Вы увидите, что exec по умолчанию не работает асинхронно.

exec имеет два других параметра. Третий, return_var может дать вам подсказку, если сценарий успешно запущен или какое-либо исключение было уволено. Вы можете использовать эту переменную, чтобы проверить, можете ли вы запускать последующие скрипты.

Протестируйте его и сообщите нам, если он сработает для вас.

На мой взгляд, было бы лучше запустить cronjobs. Они будут выполняться синхронно. Если задача «на лету», вы можете выполнить команду, чтобы добавить этот cronjob. Дополнительная информация о cronjobs: http://unixgeeks.org/security/newbie/unix/cron-1.html

http://service.futurequest.net/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=30