GNU/Linux >> Linux Esercitazione >  >> Linux

Reptyr:sposta un processo in esecuzione da un terminale all'altro senza chiuderlo

Diciamo che stai eseguendo un processo in un server remoto tramite una sessione SSH dal tuo sistema locale. Non sapevi che il completamento del lavoro remoto avrebbe richiesto molto tempo. Vuoi semplicemente lasciare il lavoro in esecuzione sul server remoto stesso e chiudere la sessione SSH senza terminare il lavoro remoto, quindi ricollegarlo alla sessione SSH più tardi o il giorno successivo. Ovviamente puoi iniziare il lavoro in screen/tmux sessione e disconnettersi dalla sessione dello schermo senza uscire dal lavoro remoto e uscire dalla sessione SSH. Ma se hai dimenticato di avviare la sessione dello schermo in primo luogo, non c'è modo di ricollegarti al processo in esecuzione in un secondo momento. Una volta chiusa la sessione SSH, anche i processi in esecuzione verranno chiusi sul sistema remoto. Allora, cosa farai in questi casi? Nessun problema. Ecco dove Reptyr il comando viene in aiuto.

Reptyr è uno strumento da riga di comando per spostare i processi in esecuzione tra pty. Basta avviare un processo che richiede molto tempo per essere completato sul sistema remoto tramite la sessione SSH dal desktop o laptop locale e chiudere la sessione SSH, tornare a casa e ricollegare il processo in esecuzione il giorno successivo. Inoltre, puoi facilmente migrare/spostare un processo di lunga durata da un Terminale a un altro Terminale istantaneamente senza doverlo terminare. Sembra utile? Certo che lo è!

Scarica - Ebook gratuito:"6 utili strumenti a riga di comando di Linux per gli amministratori di sistema"

Questo breve tutorial descrive come spostare un processo in esecuzione su un nuovo terminale usando il comando Reptyr.

Installa Reptyr sui tuoi sistemi remoti

Nota:  Il tuo sistema remoto dovrebbe avere tmux o schermo installato per spostare il processo in esecuzione.

In Arch Linux e i suoi derivati, esegui:

$ sudo pacman -S reptyr

Nei sistemi basati su DEB, esegui il seguente comando per installare Reptyr:

$ sudo apt-get install reptyr

Per installare screen o tmux, esegui:

$ sudo apt-get install tmux screen

Su RHEL / CentOS / Scieintific Linux / Fedora, reptyr non è disponibile nei repository. Quindi, puoi compilarlo e installarlo come mostrato di seguito.

Installa i seguenti prerequisiti:

$ sudo yum install git tmux screen
$ sudo yum groupinstall 'development tools'

Git clone reptyr repository con comando come utente root:

$ git clone https://github.com/nelhage/reptyr.git

Vai alla directory reptyr:

$ cd reptyr/

Esegui i seguenti comandi per compilarlo e installarlo.

$ make
$ sudo make install

Ho compilato e installato Reptyr dal sorgente nell'edizione server CentOS 7 a 64 bit e ha funzionato abbastanza bene come descritto sopra.

Sposta un processo in esecuzione da un terminale all'altro senza chiuderlo utilizzando Reptyr

Di solito, ci connettiamo al server remoto da qualsiasi sistema locale tramite SSH come mostrato di seguito.

# ssh [email protected]_Of_remote_system

Dopo esserti connesso al sistema remoto, avvia un processo di lunga durata. Ad esempio, scaricherò l'ISO desktop di Ubuntu 16.04 usando wget comando.

# wget http://cdimage.ubuntu.com/daily-live/current/xenial-desktop-amd64.iso

Output di esempio:

Come puoi vedere nello screenshot qui sopra, la dimensione totale del download è di 1,5 GB e il completamento richiederà più di 90 minuti.

Non voglio aspettare ancora a lungo, e inoltre non voglio nemmeno lasciare il lavoro a distanza.

Quindi, quello che farò è avviare una schermata o tmux sessione in un nuovo terminale, usa reptyr utility per acquisire il processo in esecuzione all'interno dello schermo o della sessione tmux. Infine, terminerò entrambe le sessioni ssh e mi ricollegherò al processo in esecuzione ogni volta che voglio.

Apriamo una nuova finestra di Terminale o una nuova scheda e avviamo una sessione screen o tmux digitando screen o tmux nel Terminale:

# screen

o

# tmux

Come puoi vedere nello screenshot qui sopra, la sessione dello schermo è stata avviata ed è in esecuzione.

Ora, troviamo i processi in esecuzione dal nuovo Terminale usando il seguente comando:

# ps -a

Output di esempio:

 PID TTY TIME CMD
 2320 pts/0 00:00:11 wget
 2343 pts/1 00:00:00 screen
 2358 pts/2 00:00:00 ps

Annota il PID per il wget processo e allegare il processo in esecuzione all'interno della sessione dello schermo utilizzando il comando:

# reptyr 2320

Fatto! Come puoi vedere nello screenshot sopra, il processo wget è stato spostato (migrato) dal vecchio Terminale alla nuova finestra del Terminale (quella in esecuzione con la sessione dello schermo).

Una volta spostato il processo in esecuzione dal Terminale originale, verrà chiuso immediatamente e inizierà a continuare da dove l'avevamo interrotto nel nuovo Terminale.

Ora puoi staccare o chiudere in sicurezza il terminale e il lavoro continuerà a essere eseguito sul tuo server remoto.

Per staccare dallo schermo o dalla sessione tmux, premi CTRL+A+D .

Dopo esserti disconnesso dalla sessione dello schermo, apparirà il seguente messaggio.

[detached from 2344.pts-1.server1]

Per ricollegare il processo in esecuzione, SSH al tuo sistema remoto:

# ssh [email protected]

Qui. 192.168.1.150 è l'indirizzo IP del mio server remoto.

Ed esegui quanto segue se usi la sessione dello schermo:

# screen -Dr

Per la sessione tmux, esegui:

# tmux attach

Voilà! Il processo in esecuzione è stato ricollegato di nuovo e vedrai che il processo è ancora in esecuzione.

Come puoi vedere nello screenshot sopra, il lavoro di wget non viene interrotto o terminato ed è ancora in esecuzione. Continuerà a funzionare finché il tuo sistema remoto è attivo e funzionante.

Riepilogo

Per riassumere, Reptyr è uno strumento molto importante e utile per gli amministratori di sistema Linux di qualsiasi livello. Nel caso in cui sei stufo di un processo che ha richiesto molto tempo per essere completato, Reptyr sarà sicuramente d'aiuto. Basta aprire una nuova finestra di Terminale, inviare SSH al server remoto, trovare l'ID dei processi in esecuzione e spostarli in modo sicuro all'interno dello schermo o delle sessioni tmux ed uscire dalla sessione SSH. Per ulteriori dettagli, fai riferimento ai link allegati alla fine di questo tutorial.

Lettura consigliata:

  • Avvia automaticamente la sessione Tmux sul sistema remoto quando si accede tramite SSH
  • Come visualizzare le informazioni di processo utilizzando Procs su Linux
  • Tmate - Condividi istantaneamente il tuo terminale con chiunque da qualsiasi luogo
  • Come modificare il tipo e la dimensione del carattere della console Linux
  • Come bloccare le sessioni della Virtual Console su Linux
  • Come passare da un TTY all'altro senza utilizzare i tasti funzione in Linux

Per ora è tutto gente. Ebbene, vi lascio alla conoscenza di questo utile strumento. Provalo e non rimarrai deluso.

Link di riferimento:

  • Reptyr GitHub
  • Guida al rettile

Linux
  1. Come visualizzare l'output di un processo in esecuzione in un'altra sessione Bash?

  2. Linux:è il processo che ha un terminale di controllo o è la sessione che ha un terminale di controllo?

  3. Copiare le ultime N righe da un file all'altro?

  4. CentOS / RHEL:come spostare un gruppo di volumi da un sistema all'altro

  5. Copia la struttura delle cartelle (senza file) da una posizione all'altra

Reptyr:sposta un processo in esecuzione da un terminale all'altro senza chiuderlo

Come spostare gli account da un server cPanel a un altro server cPanel?

Come spostare (e sovrascrivere) tutti i file da una directory all'altra?

Esiste un modo semplice per spostare/copiare un volume logico da un gruppo di volumi a un altro? (LVM2)

Qual è il modo più veloce per spostare un milione di immagini da una directory all'altra in Linux?

Come collego un terminale a un processo distaccato?