2015-04-22 11 views
5

Devo avviare e riavviare un server Web personalizzato su travis. A partire dal fondo va bene con un sub-shell (.travis.yml):Come posso avviare e interrompere un'attività in background su travis?

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

Per arrestare/uccidere di nuovo il processo che sto cercando di ottenere il suo PID e poi ucciderlo:

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

Tuttavia, SERVER_PID è vuoto.

Qual è il modo giusto per ottenere il PID di un processo in background su travis per bloccarlo (complicazione: senza utilizzare uno script di shell aggiuntivo)?

risposta

2

Il seguente dovrebbe funzionare:

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

Il () circonda il comando, crea una sub-shell. Lo $! è vuoto nei tuoi esempi, perché il programma è in esecuzione nella sotto-shell, ma il tuo $! è in esecuzione sulla shell madre.

+0

Per quanto ne so che non posso scrivere istruzioni multi-lien in travis.yml https://groups.google.com/forum/#!topic/travis-ci/uaAP9zEdiCg – andig

+0

Esatto, ma puoi mettere quanto sopra in uno script di shell ed eseguire quello script dal tuo file .travis.yml. – xmonk

7

Rispondere alla domanda qui come @ La risposta di xmonk è corretta in termini di funzionalità ma richiede uno script di shell esterno che, a sua volta, dovrebbe utilizzare un file temporaneo per scrivere il valore del pid.

Ho appena scoperto che travis-ci in realtà consente affermazioni su più righe che semplificano il tutto. Mettere questo in .travis.yml:

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