2016-09-22 2 views
0

Я хочу запустить задачу в Phing, где я сначала запускаю сервер PHP, а затем запускаю тест модуля PHP.Запуск php-сервера в Phing

Это то, что я до сих пор:

<target name="test"> 
    <!-- Run the PHP server --> 
    <exec executable="php"> 
     <arg line="-S localhost:81 server.php"/> 
    </exec> 

    <!-- Run my tests --> 
    <exec executable="${phpunit.bin}" dir="${test.dir}" passthru="true" returnProperty="test.result"> 
     <arg line="IntegrationTests"/> 
    </exec> 

    <!-- Check if succeeded --> 
    <condition property="test.succeeded"> 
     <equals arg1="${test.result}" arg2="0"/> 
    </condition> 

    <fail unless="test.succeeded" message="Unit Tests Failed"/> 
</target> 

Вопрос заключается в том, что Phing зависает после создания сервера PHP.

Проблема решается путем добавления икру свойства следующим образом:

<exec executable="php" spawn="true">

Это работает, как ожидалось, за исключением того, что процесс фактически никогда не выходит даже после того, как Phing выходит. Другими словами, PHP-сервер по-прежнему работает долго после завершения Phing своих задач.

Поэтому мой вопрос заключается в том, как правильно запустить php-сервер в фоновом режиме в Phing?

ответ

1

phing's ExecTask не сообщает вам идентификатор процесса, поэтому вы не можете просто сделать kill $pid.

Выполнение killall php убьёт Phing сам тоже :)

Самый лучший вариант (еще халтуру), вероятно, к pgrep для php -S localhost и убить этот процесс:

<exec command="pkill -f 'php -S localhost:81'"/> 

Но вы должны сделать что в любом случае, даже если сборка завершится неудачно - добавьте эту строку перед проверкой свойства succeeded.