Il comando nohup ("no hangup") impedisce a un processo di terminare quando l'utente si disconnette. Ad esempio, se un amministratore avvia uno script di backup e quindi si disconnette dal sistema, lo script interrompe l'esecuzione. Posizionando il comando nohup davanti al comando normale, lo script continua anche dopo che l'amministratore si è disconnesso.
Sintassi
La sintassi del comando nohup è:
# nohup {command/script}
Se si verifica l'errore seguente durante l'esecuzione del comando nohup:
nohup: command not found
puoi provare a installare il pacchetto seguente secondo la tua scelta di distribuzione:
Distribuzione | Comando |
---|---|
OS X | brew install coreutils |
Debian | apt-get install coreutils |
Ubuntu | apt-get install coreutils |
Alpino | apk aggiunge coreutils |
Arci Linux | pacman -S coreutils |
Kali Linux | apt-get install coreutils |
CentOS | yum install coreutils |
Fedora | dnf installa coreutils |
Raspbian | apt-get install coreutils |
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 .