Il metodo migliore è avviare il processo in un multiplexer terminale. In alternativa è possibile fare in modo che il processo non riceva il segnale HUP.
Un multiplexer terminale fornisce terminali "virtuali" che funzionano indipendentemente dal terminale "reale" (attualmente tutti i terminali sono "virtuali" ma questo è un altro argomento per un altro giorno). Il terminale virtuale continuerà a funzionare anche se il tuo terminale reale è chiuso con la tua sessione SSH.
Tutti i processi avviati dal terminale virtuale continueranno a funzionare con quel terminale virtuale. Quando ti riconnetti al server puoi riconnetterti al terminale virtuale e tutto sarà come se non fosse successo nulla, tranne il tempo che è passato.
Due popolari multiplexer terminali sono screen e tmux .
Lo schermo ha una ripida curva di apprendimento. Ecco un buon tutorial con diagrammi che spiegano il concetto: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
Il segnale HUP (o SIGHUP) viene inviato dal terminale a tutti i suoi processi figlio quando il terminale è chiuso. L'azione comune alla ricezione di SIGHUP è la chiusura. Pertanto, quando la sessione ssh viene disconnessa, tutti i processi verranno chiusi. Per evitare ciò, è possibile impedire ai processi di ricevere SIGHUP.
Due semplici metodi per farlo sono nohup
e disown
.
Per ulteriori informazioni su come nohup
e come disown
funziona leggere questa domanda e rispondere: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Nota: sebbene i processi continueranno a funzionare, non è più possibile interagire con essi perché non sono più collegati a nessun terminale. Questo metodo è utile principalmente per processi batch di lunga durata che, una volta avviati, non necessitano più di input da parte dell'utente.
screen
offre molte più opzioni, ma se si sta utilizzandoauthorized_keys
per consentire alle persone di eseguire uno script in remoto tramitessh
, l'nohup
opzione è un modo semplice per avviare i processi che durano più a lungo dellassh
sessione utilizzata per avviarli .