2015-05-15 17 views
6

Napisałem skrypt PHP CLI, który wykonuje w środowisku Continuous Integration. Jedną z rzeczy, którą robi, jest uruchamianie testów Kątomierza.Jak uruchomić wbudowany serwer WWW PHP w tle?

Mój plan był dostać wbudowanych PHP 5.4's built-in web server działać w tle:

php -S localhost:9000 -t foo/ bar.php & 

a następnie uruchomić testy kątomierz, które będą używać localhost:9000:

protractor ./test/protractor.config.js 

Jednak PHP wbudowanego serwer internetowy nie działa jako usługa w tle. Nie mogę znaleźć niczego, co pozwoli mi to zrobić z PHP.

Czy to można zrobić? Jeśli tak to jak? Jeśli jest to absolutnie niemożliwe, jestem otwarty na alternatywne rozwiązania.

+0

Chcesz powiedzieć, że chcesz demonizować proces php? Jeśli jesteś w systemie nix, możesz zajrzeć do skryptów init.d. Nie korzystałem z serwera WWW php5.4, ale jeśli uruchamia on proces, można go umieścić w tle. – EdgeCaseBerg

Odpowiedz

14

Można to zrobić w taki sam sposób, w jaki można uruchomić dowolną aplikację w tle.

nohup php -S localhost:9000 -t foo/ bar.php > phpd.log 2>&1 & 

Tutaj nohup służy do zapobiegania blokowaniu terminala. Następnie musisz przekierować standardowe wyjście (>) i stderr (2>).

0

Także oto sposób przystanku wbudowany serwer php działa w tła:

# Run in the background as Devon advised 
nohup php -S localhost:9000 -t foo/ bar.php > phpd.log 2>&1 & 
# Get last background process PID 
PHP_SERVER_PID=$! 

# rinning tests and everything... 
protractor ./test/protractor.config.js 

# Send SIGQUIT to php built-in server running in background to stop it 
kill -3 $PHP_SERVER_PID 

ta jest przydatna, gdy trzeba uruchomić testy w pewnym etapie CI itp