¿Qué sucede con una operación continua si hacemos ssh y luego nos desconectamos?

10

Estoy moviendo un directorio a otro usando el comando mv.

Sin embargo, me vi obligado a apagar mi computadora, lo que significa perder la conexión con el servidor.

¿Qué pasa con el comando mv?

Nota: Después de volver a iniciar sesión, vi que todos los archivos se han movido correctamente aunque estaba seguro de que no se movieron cuando cerré la conexión. Parece que mv continuó corriendo.

Esta es mi máquina ssh a centosh en el servidor de la nube steadfast.net.

user4951
fuente
Supongo que arrojará un error sobre la falta de disponibilidad de origen / destino
SHW
1
mover un directorio a otro es "instantáneo" si están en la misma partición. E incluso si mueve archivos por archivos, puede ser rápido. ¿Estás seguro de que no continúe después desconectó (en lugar de terminar, mientras que las diferentes señales sighup se envían a los procesos secundarios, lo que puede llevar algún tiempo [en la escala de ordenador].
Olivier Dulac
como solución alternativa, use screeno tmuxuna vez que haya iniciado sesión para iniciar un terminal virtual que continuará funcionando cuando se desconecte [es decir, puede volver a conectarlo y ver el terminal en el mismo estado en que lo dejó, más cualquier actualización en entre]
Olivier Dulac

Respuestas:

19

Si mvse inició como:

ssh host mv x y

Luego mvrecibirá un SIGPIPE (y morir) si intenta escribir algo en stdout o stderr (como un mensaje de error).

Si comenzó una sesión interactiva como:

ssh host

Y comenzó mvdesde el shell interactivo allí, cuando el lado maestro del pseudo-terminal iniciado sshdse cerrará (al sshcerrar la conexión TCP al salir), el líder de la sesión asociada con el lado esclavo del pseudo-terminal, que es el shell interactivo remoto, recibirá una señal SIGHUP (cuelgue).

Al recibir esa señal, los shells (a menos que haya emitido un trap '' HUP) generalmente envían esa señal a todos los procesos en los trabajos que han comenzado, a menos que le haya dicho explícitamente que no lo haga (como con disowno con &|algunos shells).

Otros procesos (como mv) generalmente morirán al recibir esa señal a menos que se les haya dicho que la ignoren (al usarla nohupo si su padre la ignoró).

Si ha emitido un:

trap '' HUP

Luego, todos los trabajos iniciados después de que lo hereden e ignorarán SIGHUP.

El shell no morirá por la señal SIGHUP enviada después de la desconexión, sino que saldrá en el siguiente mensaje, ya que su stdin se ha ido. Al salir, algunos proyectiles envían SIGHUP a sus trabajos (no rechazados). Los que comiencen después trap '' HUPlo ignorarán, los otros morirán.

En resumen, en ese caso, a menos que haya tomado precauciones previas para que no suceda, mvmorirá.

Para evitarlo la próxima vez, si usa tcsh, zsho bash, antes de apagar la máquina, presione Ctrl-Zpara suspender mv, ingrese bgpara reanudarla en segundo plano y disownpara rechazarla .

O podrías usar screeno tmux. Tras un SIGHUP, esos se desconectarán de su terminal host ahora desaparecida, pero las aplicaciones que se ejecutan en el terminal que emula continuarán ejecutándose sin cabeza y puede volver a conectar la sesión a otro terminal más tarde para ver cómo mvfue.

O use nohup mvpara hacerse mvinmune a SIGHUP y hacer que su salida y errores vayan a un nohup.outarchivo que puede verificar más adelante.

Ahora, no sé acerca de su proveedor de alojamiento específico, pero con algunos, cuando ingresa ssha la instancia, no está iniciando una sesión de shell allí, sino que se conecta a la consola, es decir, a una sesión que ya se inició. , y cuando sale, no termina esa sesión, solo se desconecta de ella. Entonces, el caparazón no mata, ni tampoco mv. Si ese es el caso, notará que psejecutar desde allí le daría lo mismo pidpara su shell en dos sshsesiones separadas .

Stéphane Chazelas
fuente
Entonces estás diciendo que el mv será terminado. Bueno, por favor revisa la nota.
user4951
2
+1. respuesta sobresaliente (ya que va bien en los detalles para explicar qué sucede y cuándo).
Olivier Dulac
He compilado un artículo basado en sus respuestas . Con suerte, alguien lo encontrará útil.
x-yuri