GNU/Linux >> Linux Esercitazione >  >> Linux

Il comando Nohup in Linux ti consente di eseguire comandi anche dopo il logout

Nohup sta per "non riattaccare". È un comando estremamente utile per far funzionare il tuo processo anche dopo esserti disconnesso.

Uno degli usi più comuni può essere trovato nell'esecuzione di comandi che richiedono tempo su una connessione SSH. Se ritieni che la tua sessione SSH possa interrompersi, puoi utilizzare il comando con nohup in questo modo:

nohup your_command &

Cos'è il comando nohup?

Nohup può essere visto come un wrapper. Prefissa il tuo comando con nohup così:

nohup COMMAND ARGS ....

Nessun problema lo scopo è quello di intercettare e prevenire SIGHUP segnali dal raggiungimento di COMANDO .

Quando prefiggi il tuo comando con nohup , l'input verrà reindirizzato da un file illeggibile ( nohup COMMAND ). In parole semplici, non chiamare un comando con nohup se è necessario inviare input a quel comando. Quando nohup un comando, deve essere in grado di essere eseguito automaticamente.

Nessun problema tenterà prima di reindirizzare l'output in ./nohup.out o lo invierà a ~/nohup.out se necessario. Puoi anche decidere dove reindirizzare l'output in questo modo:

nohup COMMANDS >/path/to/output/file

Non c'è molto da dire su nohup , non ha un lungo elenco di opzioni. C'è solo –aiuto e –versione .

Esempio di utilizzo del comando nohup

L'esecuzione di uno script con nohup è semplice come questo.

nohup ./nhp.sh

Tieni presente che nohup non ha eseguito il fork del processo in background. Nessun problema è lì solo per intercettare SIGHUP segnali. Una volta che il comando è in esecuzione, puoi procedere e chiudere il tuo terminale. Ti avviserà che un processo è in esecuzione. Conferma che vuoi ucciderlo.

Quando hai chiuso il terminale, tutti i processi figlio hanno ricevuto un segnale SIGHUP. Nohup ha impedito a quel segnale di raggiungere il mio comando. L'immagine seguente mostra le informazioni sul processo relative al mio comando mentre il terminale era ancora in esecuzione.

Vedi il PPID? Questo è l'ID del processo padre. Quando hai richiesto di chiudere il terminale, tutti i figli di PPID hanno ricevuto un SIGHUP segnale. Nessun problema impedito a quel segnale di raggiungere il nostro script. Il processo padre è terminato e il nostro script è rimasto orfano. Quando un processo diventa orfano, gli viene assegnato automaticamente 1 (systemd o init) come genitore.

Come puoi vedere, non è difficile dimostrare l'uso di nohup . Comando molto semplice. Puoi eseguire il fork del processo in background in questo modo:

nohup ./nhp.sh &

Puoi anche decidere dove viene reindirizzato l'output in questo modo:

nohup ./nhp.sh >/path/to/file &

Nota che se spegni o riavvii il sistema Linux, il comando verrà interrotto. Quando richiedi uno spegnimento o un riavvio, tutti i processi ricevono un SIGTERM e poi un SIGKILL . Questi segnali non vengono intercettati da nohup .

Nohup tramite connessione SSH

Un uso che spesso viene in mente subito quando impari nohup è essere in grado di avviare un processo su un computer remoto tramite SSH. Logicamente, eseguire un comando con nohup ti permetterebbe di disconnetterti dalla tua connessione SSH e il processo sarebbe ancora in esecuzione.

nohup COMMAND &

Un problema comune è che a volte SSH si "blocca" durante la disconnessione. Questo perché SSH spesso rifiuterà di perdere qualsiasi flusso di dati da e verso qualsiasi processo in background. Quindi si "bloccherà" fino al termine del processo.

Questo problema può essere spesso risolto reindirizzando tutti e 3 i flussi di dati.

nohup COMMAND >./nohup.out 2>./nohup.err &

Spero che questo rapido articolo ti abbia aiutato a utilizzare meglio le sessioni SSH. Se hai domande o suggerimenti, lascia un commento qui sotto.


Linux
  1. 10 usi sorprendenti e misteriosi di (!) Simbolo o operatore nei comandi Linux

  2. 10 comandi di base di Linux che devi conoscere

  3. 4 suggerimenti per aiutarti a ottenere il massimo dal comando df di Linux

  4. Comandi Linux dalla A alla Z

  5. Comando eco di Linux

Come eseguire più comandi Linux in un unico comando

3 comandi Linux di cui ti sei dimenticato

Come eseguire più comandi Linux contemporaneamente nel terminale Linux

20 comandi Linux principali di cui avrai bisogno ogni giorno

Comando Nohup in Linux

I 50+ migliori comandi Linux che DEVI conoscere