Transfiere el comando actual a una sesión desmontable (tmux / screen)

41

Actualmente estoy ejecutando una copia de seguridad y ahora debe transferirse a una desmontable como en tmuxo screen. ¿Hay alguna manera de hacer esto cuando el comando se está ejecutando actualmente?

Puedo enviar el comando al fondo presionando Ctrl+ Zy volver a colocarlo emitiendo un fgcomando. pero no sé si esa sesión puede regresar cuando salgo de la terminal.

Jürgen Paul
fuente
1
No hay manera de hacer eso. Debe iniciar el comando desde una sesión de pantalla (u otra) para que sea desmontable.
Dan D.

Respuestas:

45

Esto funciona la mayor parte del tiempo:

Prerrequisitos: tener reptyry tmux/ screeninstalado; podrá encontrarlos con apt-geto yum, según su plataforma.

  1. Use Ctrl+ Zpara suspender el proceso.

  2. Reanude el proceso en segundo plano con bg

  3. Encuentre la identificación del proceso del proceso en segundo plano con jobs -l

    Verás algo similar a esto:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. Desconozca el trabajo del padre actual (shell) con disown yourprocessname

  5. Inicio tmux(preferido), o screen.

  6. Vuelva a adjuntar el proceso a tmux/ screensession con reptyr:

    reptyr 11475
    
  7. Ahora puede desconectar el multiplexor (por defecto Ctrl+ B, Dpara tmuxo Ctrl+ A, Dpara screen) y desconectar SSH mientras su proceso continúa en tmux/ screen.

  8. Más tarde, cuando vuelva a conectarse con SSH, podrá conectarlo a su multiplexor (p tmux attach. Ej .).

Ville
fuente
2
Desafortunadamente, después de correr sudo reptyr 1430todavía recibí: "... [-] No se puede abrir el tty en el niño. No se puede adjuntar a pid 1430: Permiso denegado"
Daryl Spitzer
3
Puede encontrar cierto éxito con la opción -L, por ejemplo, reptyr -L 1430 en su caso.
cgseller
1
Ejecute esto cuando sea necesario:echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Yanhao
también está en Arch a través de yo: archlinux.org/packages/community/i686/reptyr (no apt-get o yum)
Tommy
1
Después bg, el proceso debería ejecutarse en segundo plano, por lo que jobsdebería decir en Runninglugar de Stopped.
G-Man dice 'Restablecer a Monica'
2

reptyr es bueno pero recibí un error de permiso

$ reptyr 30622

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

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

que funcionó de maravilla

$ reptyr -L 30622
Opened a new pty: /dev/pts/4
Fifi Finance
fuente
2
Cuando agregué el -Lmensaje, recibí un mensaje como el tuyo, Opened a new pty: /dev/pts/6pero mi suspendido topno apareció en el tmux. ¿que me estoy perdiendo aqui?
Mehrad Mahmoudian
-1

puede usar disown para separar el trabajo de su terminal, si ese comando está disponible.

Sin embargo, es más seguro ejecutarlo con nohup.

johnshen64
fuente
¿Puedes ampliar esto? ¿A qué te refieres con empezar nohup? ¿Cómo funciona disowningun proceso?
Darth Android
disown separa el proceso en segundo plano (que pones en segundo plano con control-z) del terminal para que el proceso continúe después de que el terminal desaparezca. puede simplemente escribir disown después de control-z, si se encuentra el comando. Sin embargo, esto es en teoría y puede no funcionar de manera confiable. la próxima vez es más seguro agregando nohup en el frente de su programa para que pueda salir de la terminal de manera segura.
johnshen64
He descubierto que 'renegar' es bastante poco confiable, como se mencionó. nohup no es realmente mucho mejor. Sin embargo, reptyr podría ser una solución. github.com/nelhage/reptyr
anastrophe
Esto no responde la pregunta. La pregunta no es solo "cómo cierro el terminal sin eliminar la copia de seguridad", sino "cómo lo reanudo más tarde". A lo que la respuesta correcta es "no puedes".
Gabe
Veo un posible desacuerdo semántico aquí, y este es un resultado de búsqueda bastante popular para palabras clave como 'reubicable', 'independiente de posición', 'detach tmux', etc., así que espero que pueda perdonar la publicación necro. ¿Quiso decir "no puede" debido a la asignación de memoria diferente entre detener el programa y reanudarlo? Un programa de copia de seguridad solo sabrá qué archivos respaldar según la estructura de archivos que se proporciona, y la estructura de archivos existe para hacer que esa memoria física sea mapeable en el futuro. (¡Retrocedemos para la ocasión que no lo hace!)
John P