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.