2015-04-22 5 views
5

Ich muss einen benutzerdefinierten Webserver auf Travis starten und neu starten. im Hintergrund starten ist in Ordnung einer Unterschale (.travis.yml) mit:Wie kann ich eine Hintergrundaufgabe auf Travis starten und stoppen?

- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &); fi 

zu stoppen/kill den Prozess wieder Ich versuche, seine PID zu erhalten und es dann töten:

- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &) && SERVER_PID=$!; fi 
- ... 
- if [ "$TEST_ADAPTER" = "HTTP" ]; then kill -9 $SERVER_PID && ...; fi 

jedoch SERVER_PID ist leer.

Was ist der richtige Weg, um die PID eines Hintergrundprozesses auf Travis zu erhalten, um es zu stoppen (Komplikation: ohne ein zusätzliches Shell-Skript zu verwenden)?

Antwort

2

sollten folgende Arbeiten:

if [ "$TEST_ADAPTER" = "HTTP" ]; then 
    vendor/bin/httpd.php& 
    SERVER_PID=$! 
fi 

Der () den Befehl umgibt, erzeugt eine Unterschale. Die $! wird in Ihren Beispielen leer angezeigt, da das Programm in der Subshell ausgeführt wird, aber Ihre $! in der übergeordneten Shell ausgeführt wird.

+0

Soweit ich weiß, dass ich nicht multi-lien Aussagen in travis.yml https://groups.google.com/forum/#!topic/travis-ci/uaAP9zEdiCg schreiben – andig

+0

Richtig, aber Sie können das Obige in ein Shell-Skript einfügen und dieses Skript aus Ihrer .travis.yml-Datei ausführen. – xmonk

7

Frage hier beantworten, da @xmonks Antwort in Bezug auf Funktionalität korrekt ist, aber ein externes Shell-Skript erfordert, das wiederum eine temporäre Datei verwenden müsste, um den pid-Wert zu schreiben.

Ich habe gerade herausgefunden, dass travis-ci tatsächlich mehrzeilige Anweisungen erlaubt, die das Ganze vereinfachen. Setzen Sie dieses in .travis.yml:

- | 
    if [ "$TEST_ADAPTER" = "HTTP" ]; then 
    vendor/bin/httpd.php& 
    SERVER_PID=$! 
    fi 
Verwandte Themen