Trasferisci il comando corrente in una sessione rimovibile (tmux / screen)


41

Attualmente sto eseguendo un backup e ora deve essere trasferito su uno rimovibile come su tmuxo screen. C'è un modo per farlo quando il comando è attualmente in esecuzione?

Posso inviare il comando in background premendo Ctrl+ Ze rimetterlo in ordine eseguendo un fgcomando. ma non so se quella sessione può tornare indietro quando esco dal terminale.


1
Non c'è modo di farlo. Devi avviare il comando da una schermata (o altra) sessione affinché sia ​​staccabile.
Dan D.

Risposte:


45

Funziona, il più delle volte:

Prerequisiti: avere reptyre tmux/ screeninstallato; potrai trovarli con apt-geto yum, a seconda della tua piattaforma.

  1. Usa Ctrl+ Zper sospendere il processo.

  2. Riprendi il processo in background con bg

  3. Trova l'ID del processo in background con jobs -l

    Vedrai qualcosa di simile a questo:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. Sconosciuto il lavoro dal genitore corrente (shell) con disown yourprocessname

  5. Avvia tmux(preferito) o screen.

  6. Ricollegare il processo alla tmux/ screensessione con reptyr:

    reptyr 11475
    
  7. Ora puoi staccare il multiplexer (predefinito Ctrl+ B, Dper tmux, o Ctrl+ A, Dper screen) e disconnettere SSH mentre il processo continua in tmux/ screen.

  8. Successivamente, quando ti riconnetti con SSH, puoi collegarti al tuo multiplexer (ad es tmux attach.).


2
Purtroppo dopo la corsa sudo reptyr 1430ho ancora ottenuto: "... [-] Impossibile aprire la tty nel bambino. Impossibile collegarsi al pid 1430: autorizzazione negata"
Daryl Spitzer,

3
Potresti trovare qualche successo con l'opzione -L, ad esempio reptyr -L 1430 nel tuo caso.
cgseller,

1
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Eseguilo

è anche su Arch via yo: archlinux.org/packages/community/i686/reptyr (non apt-get o yum)
Tommy

1
Dopo bg, il processo dovrebbe essere eseguito in background, quindi jobsdovrebbe dire Runningpiuttosto che Stopped.
G-Man dice "Reinstate Monica"

2

reptyr è buono ma ho ricevuto un errore di autorizzazione

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

Quindi trovato
-L Like '-l', but also redirect the child's stdio to the slave.

che ha funzionato come un fascino

$ reptyr -L 30622
Opened a new pty: /dev/pts/4

2
Quando ho aggiunto -Lho ricevuto un messaggio come il tuo, Opened a new pty: /dev/pts/6ma il mio sospeso topnon è apparso nel TM. cosa mi sto perdendo qui?
Mehrad Mahmoudian,

-1

puoi usare disown per staccare il lavoro dal suo terminale, se quel comando è disponibile.

è comunque più sicuro eseguirlo senza nohup.


Puoi approfondire su questo? Cosa vuoi dire per iniziare nohup? Come funziona disowningun processo?
Darth Android

disown stacca il processo in background (che si mette in background con control-z) dal terminale in modo che il processo continui dopo che il terminale è andato. puoi semplicemente digitare disown dopo control-z, se viene trovato il comando. tuttavia questo è in teoria e potrebbe non funzionare in modo affidabile. la prossima volta è più sicuro aggiungendo nohup nella parte anteriore del programma in modo da poter uscire in sicurezza dal terminale.
johnshen64,

Ho trovato 'disown' per essere abbastanza inaffidabile, come detto. nohup non è davvero molto meglio. reptyr potrebbe essere comunque una soluzione. github.com/nelhage/reptyr
anastrophe

Questo non risponde alla domanda. La domanda non è solo "come chiudo il terminale senza interrompere il backup", è "come posso ripristinarlo in seguito". A cui la risposta corretta è "non puoi".
Gabe,

Vedo un possibile disaccordo semantico qui, e questo è un risultato di ricerca piuttosto popolare per parole chiave come "trasferibile", "indipendente dalla posizione", "staccare tmux", ecc. Quindi spero che tu possa perdonare il necro-post. Intendevi "impossibile" a causa della diversa mappatura della memoria tra l'arresto del programma e il suo ripristino? Un programma di backup saprà solo quali file eseguire il backup dalla struttura del file fornita e la struttura del file esiste per rendere mappabile quella memoria fisica in futuro. (Facciamo un backup per l'occasione che non lo fa!)
John P.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.