2015-11-16 15 views
5

Ho in esecuzione il contenitore ubuntu docker con solo uno script bash all'interno. Voglio iniziare la mia applicazione all'interno di quel contenitore con exec finestra mobile come quella:Perché la finestra mobile exec sta eliminando il processo nohup all'uscita?

docker exec -it 0b3fc9dd35f2 ./main.sh 

All'interno script principale voglio correre un'altra applicazione con nohup come questa è una lunga applicazione in esecuzione:

#!/bin/bash 
nohup ./java.sh & 
#with this strange sleep the script is working 
#sleep 1 
echo `date` finish main >> /status.log 

Il java .SH script è come segue (per semplicità si tratta di uno script fittizio):

#!/bin/bash 
sleep 10 
echo `date` finish java >> /status.log 

Il problema è che java.sh viene ucciso subito dopo ritorna finestra mobile exec. La domanda è: perché?

L'unica soluzione che ho scoperto è l'aggiunta di un dummy sleep 1 nel primo script dopo l'avvio di nohup. Il secondo processo sta funzionando bene. Hai qualche idea del perché sia ​​così?

[EDIT]

Seconda soluzione è quella di aggiungere un po 'echo o trap comando per java.sh scritto poco prima di dormire. Di quanto funzioni bene. Sfortunatamente non posso usare questa soluzione alternativa al posto di questo script ho il processo java.

+0

non si inizia un contenitore con 'finestra mobile exec', ma con una 'finestra mobile 'e dovresti dare un'occhiata da vicino alle direttive' CMD' e 'ENTRYPOINT' in a Do ckerfile – user2915097

+0

Ho già in esecuzione container con processi diversi. Con il docker exec voglio iniziare un secondo. Questo è lo scenario di integrazione continua, quindi vogliamo avere più processi in un unico contenitore. –

risposta

5

Questa non è una risposta, ma non ho ancora la reputazione necessaria per commentare.

Non so perché il nohup non funziona. Ma ho una soluzione che ha funzionato, con le vostre idee:

docker exec -ti running_container bash -c 'nohup ./main.sh &> output & sleep 1' 
+0

grazie, questo funziona per me. – mainframer

2

So che questa è una risposta in ritardo, ma vorrei aggiungere che qui per motivi di documentazione.

Quando si usa nohup in bash e funzionante con 'exec' su un contenitore finestra mobile, è necessario utilizzare

$ docker exec -d 0b3fc9dd35f2 /bin/bash -c "./main.sh"

L'opzione -d significa:

-d, - staccare la modalità distaccata: eseguire il comando nello sfondo

per ulteriori informazioni su docker exec, vedi: https://docs.docker.com/engine/reference/commandline/exec/

Questo dovrebbe fare il trucco.

1

Ok, uniamoci due risposte di cui sopra: D

Prima rcmgleite dicono esattamente a destra: utilizzare

-d

opzioni per eseguire processo come sfondo 'distaccato'.

E secondo (il più importante!) se esegui il processo distaccato, non hai bisogno di nohup!

deploy_app.sh

#!/bin/bash 
cd /opt/git/app 
git pull 
python3 setup.py install 
python3 -u webui.py >> nohup.out 

eseguire questo all'interno di un contenitore

docker exec -itd container_name bash -c "/opt/scripts/deploy_app.sh" 

Controllare lo

$ docker attach container_name 
$ ps aux 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.0 0.0 11768 1940 pts/0 Ss Aug31 0:00 /bin/bash 
root  887 0.4 0.0 11632 1396 pts/1 Ss+ 02:47 0:00 /bin/bash /opt/scripts/deploy_app 
root  932 31.6 0.4 235288 32332 pts/1 Sl+ 02:47 0:00 python3 -u webui.py 
Problemi correlati