L'utilità nohup esegue una riga di comando in modo tale che il comando continui a essere eseguito dopo la disconnessione. In altre parole, nohup fa sì che un processo ignori un segnale SIGHUP. A seconda di come è configurata la shell locale, un processo avviato senza nohup e in esecuzione in background potrebbe essere interrotto quando ti disconnetti.
Sintassi per eseguire il comando nohup
La sintassi dei comandi di base per eseguire un comando nohup è la seguente:
# nohup command_with_options &
Qualsiasi output del tuo lavoro verrà reindirizzato a un file chiamato "nohup.out", a meno che tu non specifichi diversamente con
# nohup command > myout.file 2>&1
che invia tutto l'output al file myout.file.
Salvataggio dell'output del comando nohup
Se non reindirizzi l'output di un comando eseguito utilizzando nohup, sia lo standard output che lo standard error vengono inviati al file denominato nohup.out nella directory di lavoro. Se non disponi dell'autorizzazione di scrittura per la directory di lavoro, nohup invia l'output a ~/nohup.out .
Puoi anche inviare l'output a qualsiasi altro file specificato da te come mostrato sopra nella sintassi del comando.
Esempi
1. Esecuzione di nohup senza specificare un file di output
Facciamo un esempio e testiamo che effettivamente continui a funzionare dopo che ti sei disconnesso. Daremo il via a uno script chiamato script.sh. Il contenuto dello script è il seguente:
# cat script.sh #!/bin/sh while(true) do echo "Hello World!" sleep 10 done
Eseguiamo lo script in backgroup con il comando nohup:
# nohup script.sh & [1] 179 $ nohup: appending output to `nohup.out`
Come puoi vedere sopra, non abbiamo specificato un file di output. Pertanto, l'output standard e l'errore standard per impostazione predefinita vanno nel file nohup.out nella directory da cui è stato richiamato lo script. Anche il numero 179 Specificato l'ID processo (PID) del lavoro. Questo PID può essere verificato nell'output del comando "ps -ef" come mostrato di seguito.
Ora esci dalla shell, accedi di nuovo ed esegui il seguente comando:
$ ps x | grep script.sh 179 ? S N 0:01 sh /root/script.sh 506 p2 S 0:00 grep script.sh
Lo script funziona ancora. Usa “ps -ef | grep ps1” se il tuo sistema non supporta ps x. Puoi anche controllare il file di output nohup.out per ulteriori conferme.
# cat nohup.out Hello World! Hello World! Hello World! Hello World! ...NOTA :Se si esegue un altro comando utilizzando nohup, l'output viene aggiunto al file nohup.out esistente. Fai attenzione quando esegui più comandi dalla stessa directory, perché tutto l'output viene inviato allo stesso file nohup.out, che può creare confusione.
Eseguire nohup specificando un file di output
Ora lo script sopra può anche essere eseguito con il comando nohup e specificando un file di output personalizzato come mostrato di seguito:
# nohup script.sh > /tmp/script.out 2>&1 [1] 14235
Conclusione
Se stai eseguendo un processo e non pensi che sarà completato prima che ti disconnetti per la giornata, usa il comando nohup. Nohup continuerà l'elaborazione quando esci dal tuo account. Nohup significa non riattaccare .