Esegui lo script Bash in background e termina il terminale


Risposte:


45

Per evitare la propagazione dei segnali di uscita ai processi figlio del terminale e della shell, eseguire il comando con nohup, ad esempio:

nohup cmd &

1
Questa è la risposta corretta Senza nohup, il processo avviato è ancora considerato un "figlio" del processo terminale e quindi terminato se il terminale è chiuso.
— Izzy,

3
cmd & disownfunziona anche, poiché &viene trattato come un ;separatore di comandi. Il comando disown rimuove la connessione tra la sessione della shell bash e il comando in background.
— lornix,

2
zsh ha una scorciatoia per questo: cmd &|.
— Thor,

Perché questo funzioni, ho dovuto cambiare una preferenza in Terminal.app. In Profili, seleziona il tuo profilo attivo, quindi Shell> Quando la shell esce> Chiudi se la shell è uscita in modo pulito
— antoine

6

Utilizzando screen:

screen -S <session name> -d -m <your command>

dopodiché puoi uscire dal terminale, inoltre puoi ricollegarlo ad esso:

screen -r <session name>

Maggiori informazioni: riferimento


4

Se si desidera eseguire un comando o un file specifico ogni secondo circa in background dopo essere usciti dal terminale, è possibile provare questa semplice piccola cosa;

nohup watch -n5 'bash script.sh' &

Sarebbe eseguito scipt.sh ogni 5 secondi.


1
"nohup" è già coperto dalla risposta accettata. E sono abbastanza sicuro che il richiedente abbia menzionato cron perché lo stavano usando per dire "Esegui questo comando qualche secondo in futuro", non per eseguirlo periodicamente.
— David Richerby,

1
La mia risposta non peggiora le cose. Vedi il punto di voto negativo. Neural sarebbe sufficiente.
— jamietelin,

3

Inserisci un carattere "&" dopo il tuo comando.

per esempio:

/home/your/script.sh &

7
in questo caso, quando il terminale è chiuso, anche il processo viene avviato da /home/your/script.sh- in quanto non è stato staccato dal suo "genitore", ma solo "in background". Usa nohupper staccarlo per davvero.
— Izzy,

Mio male, non lo sapevo, ma quando ho provato su Debian, il comando ha continuato a essere eseguito dopo aver chiuso la shell che lo ha lanciato: /
— Flinth

1
Non sono sicuro di dove sia esattamente collegato il processo in background e quando. Ma se ad esempio si accede a un computer remoto, viene definitivamente interrotto non appena si esegue il logout (tranne se si è demonizzato da solo). Quindi, per essere sicuri al 100%, preferisci usare nohup- che registra anche tutto l'output (ora invisibile) in un file chiamato nohup.outsituato nella directory da cui hai avviato il comando.
— Izzy,

Bene, grazie per le tue spiegazioni ^^
— Flinth

Questa risposta potrebbe funzionare bene se combinata con il jobscomando. Molto spesso voglio essere in grado di tornare al processo della shell dopo averlo messo in background.
— Djangofan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.