it-swarm.it

Mantieni i processi in esecuzione dopo la disconnessione della sessione SSH

A volte ho processi a lungo in esecuzione che voglio dare il via prima di andare a casa, quindi creo una sessione SSH sul server per avviare il processo, ma poi voglio chiudere il mio laptop e tornare a casa e più tardi, dopo cena, voglio controlla il processo che ho iniziato prima di lasciare il lavoro. Come posso farlo con SSH? La mia comprensione è che se si interrompe la connessione SSH, si interromperà anche la sessione di accesso sul server, uccidendo quindi il processo di lunga durata.

216

Utilizzare Nohup per fare in modo che il processo ignori il segnale di blocco:

$ Nohup long-running-process &
$ exit
217
Warren Young

Volete usare GNU Screen. È super fantastico!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+a , d per staccare dalla sessione dello schermo

exit                 #disconnect from the server, while run-a-long-process continues

Quando torni sul tuo laptop:

ssh [email protected]
screen -r            #resume the screen session

Quindi controlla l'avanzamento del tuo processo di lunga durata!

screen è uno strumento molto completo e può fare molto di più di quello che ho descritto. Durante una sessione dello schermo, prova ctrl + a ,? per imparare alcuni comandi comuni. Probabilmente i più comuni sono:

  • CTRL+a , c per creare una nuova finestra
  • CTRL+a , n per passare alla finestra successiva nella sessione dello schermo
  • CTRL+a , p per passare alla finestra precedente nella sessione dello schermo
  • se accedi da un gruppo di sistemi diversi, potresti esserti accidentalmente lasciato collegato a una sessione di schermo attiva su un altro computer. per questo motivo, riprendo sempre con screen -d -r per assicurarsi che se un'altra Shell è collegata alla mia sessione dello schermo, verrà staccata prima di riprenderla sul mio sistema attuale.
143
Sandy

Se non hai pianificato in anticipo e impostato screen, ecc. Procedi come segue:

  1. Se il processo è in esecuzione in background: vai a # 3, altrimenti: Ctrl-Z per sospendere il processo in primo piano. Questo riporterà il numero di processo del processo sospeso, ad esempio:

    [1]+  Stopped                 processName
    
  2. Invia processName allo sfondo con bg %1 (usando qualunque sia il lavoro # sta seguendo %). Questo riprenderà processName in background.

  3. DisownprocessName con disown %1 o disown PID. Usa il -h flag se si desidera mantenere la proprietà fino a quando non si termina l'attuale Shell.

42
Mike Covington

Quello che vuoi usare è screen o ancora meglio un wrapper intuitivo attorno allo schermo chiamato byobu.

Lo schermo consente di eseguire più sessioni di terminale virtuale nella stessa sessione ssh. A tutorial e pagine della guida sono disponibili.

byob è un wrapper che consente di aprire facilmente nuove schermate con un semplice tasto funzione anziché la combinazione di tasti da ctrl-a. Mostra anche una riga di stato con tutti i terminali virtuali aperti che possono essere nominati.

Un'altra caratteristica interessante è il fatto che tutto lo schermo può rimanere attivo mentre la connessione ssh è disconnessa. Ti connetti nuovamente tramite ssh e chiami byobu e tutto è come prima.

Finalmente alcuni schermate di byobu.

15
txwikinger

Vale la pena notare che

ssh -t lala screen -rxU moo si collegherà alla sessione moo sull'host lala

ssh -t lala screen -S moo creerà la sessione moo sull'host lala

e

ssh -t lala screen -S moo quux creerà la sessione moo sull'host lala ed eseguirà il programma quux, chiudendo la sessione al completamento.

9
cjac

Puoi trovare una buona guida qui: Mantieni la sessione SSH in esecuzione quando ti disconnetti

Sudo apt-get install screen

Ora puoi iniziare una nuova sessione schermo semplicemente digitando schermo dalla riga di comando. Ti verranno mostrate alcune informazioni sullo schermo. Premi invio e sarai ad un normale prompt.

Per disconnettersi (ma lasciare la sessione in esecuzione) Hit Ctrl + A e poi Ctrl + D in successione immediata. Vedrai il messaggio [distaccato]

Per riconnettersi a una sessione già in esecuzione

screen -r

Per riconnettersi a una sessione esistente o crearne una nuova se non esiste

screen -D -r

Per creare una nuova finestra all'interno di una sessione dello schermo in esecuzione Hit Ctrl + A e poi C in successione immediata. Vedrai un nuovo prompt.

Per passare da una finestra dello schermo a un'altra Premi Ctrl + A e poi Ctrl + A in successione immediata.

Per elencare le finestre dello schermo aperto Premi Ctrl + A e poi W in successione immediata

4

Vecchia domanda, strano ancora nessuno lo ha consigliato tmux , che funge da involucro per n console e li tiene aperti fino al momento del bisogno. Ciò consente un maggiore controllo, oltre a una serie di funzioni che tmux ha. È facile gestirlo, basta eseguire tmux, che ti porta nella sua Shell, iniziare il tuo lavoro looong, quindi premere ctrl + b seguito da d (staccare) (ctrl+b è il "ok google" di tmux e d è il comando per chiudere senza uscire dalla Shell). Questo in realtà funziona se si chiude, ad esempio, PuTTY. Dopo cena, quando ti riconnetti, puoi riaprire tmux con tmux attach per vedere lo schermo esattamente come te ne sei andato. Qualcosa che amo è il riquadro di divisione: ctrl+b e quindi premere ". Per passare da un riquadro all'altro, ctrl+b e quindi premere la freccia su/giù.

4
nnsense

Uso NX NoMachine, che è gratuito per me perché sono solo io. In sostanza, esegue una sessione X sul server a cui è possibile connettersi e disconnettersi ripetutamente. La sessione X continua a funzionare quando non sei connesso. Le connessioni possono essere effettuate ovunque. Puoi scegliere tra finestre mobili o una singola finestra contenente un intero desktop (ad esempio un desktop Gnome completo). Il client (che eseguiresti sul tuo laptop) può essere eseguito su Linux, MacOS, Solaris o Microsoft Windows. In quest'ultimo caso, se si scelgono finestre mobili, queste vengono visualizzate singolarmente sulla barra delle applicazioni di Windows.

Uso il mio Windows XP (di cui ho bisogno per determinati hardware specifici di Windows che ho) come front-end per i miei due server Linux usando NX Nomachine. Posso persino stampare sulla stampante collegata a il mio laptop Windows da Linux.

2
Rob_before_edits

Tmux è una buona opzione disponibile per eseguire i tuoi processi di lunga durata in background.

Devo continuare a eseguire i processi a lungo termine su una piattaforma cloud di Google VM (con sistema operativo: Ubuntu 16.0). Da dove devo avviare il terminale SSH e dal terminale, ho per mantenere il terminale collegato per eseguire il processo. Ora fino a questo, tutto va bene. Ma attendere se la connessione con il mio terminale SSH è terminata, i processi a lungo termine si interrompono immediatamente e quindi devo eseguirli nuovamente una volta il terminale SSH viene riavviato o da un nuovo terminale SSH.

Trovo che tmux sia la buona soluzione per evitare la chiusura dei processi che vogliamo eseguire anche dopo la chiusura del terminale.

Terminale multiplexer (tmux) per avviare la sessione tmux:

  1. Avviare il terminale SSH
  2. Digitare tmux. Si aprirà una finestra nello stesso terminale.
  3. Eseguire il comando per avviare processi a esecuzione prolungata nella sessione tmux.

Ora anche se il terminale SSH viene chiuso/terminato improvvisamente, la sessione di tmux continuerà a eseguire i processi di esecuzione avviati sull'istanza/server.

Se la connessione è terminata, come riconnetterla per vedere i processi in esecuzione nella sessione tmux in background:

  1. ricollegare o aprire un nuovo terminale SSH. Per vedere questo processo (che viene mantenuto in esecuzione in background) digitare: tmux attach comando.

Vuoi terminare la sessione di tmux:

  1. Ferma il processo. Quindi digitare exit in tmux-terminal-window.

(Nota: se utilizziamo tmux detach comando: uscirà dalla finestra/terminale della sessione tmux senza terminare/interrompere le sessioni tmux)

Per maggiori dettagli, consultare il seguente articolo:

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-background/
1
Yogesh