Estoy usando el reboot -f
comando de forma remota para forzar el reinicio de una máquina Unix. El problema es que la conexión ssh permanece activa durante mucho tiempo y no sé por qué. Quiero cerrar la conexión ssh inmediatamente después de reiniciar la máquina y volver a mi shell local. ¿Cómo puedo hacer eso? Tenga en cuenta que el comando de reinicio sin -f
bandera no funciona.
18
Enter
. Entonces, por ejemplo,~.
para finalizar la sesión.Enter ~?
para una lista de otros.Respuestas:
El comando
reboot -f
nunca regresa (a menos que no tenga permiso para provocar un reinicio). En el punto donde se emite, el cliente SSH está esperando algo que hacer, que podría ser:Dado que el proceso del servidor SSH está inactivo, el cliente SSH no morirá hasta que se active el temporizador.
Si corres
ssh remotehost 'reboot -f >/dev/null &'
, entonces lo que sucede es:reboot
comando en segundo plano.reboot
comando hace que la máquina se reinicie.Sin embargo, esto no es confiable: dependiendo del tiempo, el paso 3 podría ocurrir antes del paso 2. Agregar un temporizador hace que esto sea poco probable:
Para estar absolutamente seguro de que el lado del servidor está comprometido a ejecutarse
reboot
, mientras se asegura de que en realidad no se reinicie antes de notificar al cliente que está comprometido, necesita una notificación adicional para ir del servidor al cliente. Esto se puede generar a través de la conexión SSH, pero se complica.fuente
(sleep 1 && sudo reboot &) && exit
. Los paréntesis generan un subproceso, que espera un segundo y luego inicia el reinicio. Sin embargo, el proceso de host finaliza inmediatamente la sesión ssh. No soy un gurú de la concha, pero esto funcionó para mí hasta ahora.Encontré esta solución para dar lo mejor de mí.
Úselo
-o "ServerAliveInterval 2"
con sussh
comando, así:Dicha opción hace que el lado del cliente empuje el servidor sobre un canal seguro cada 2 segundos. Finalmente, a medida que avanza el reinicio, se detendrá para responder y el cliente cortará la conexión.
fuente
Algunas respuestas fueron cercanas, pero la respuesta correcta es:
explicación:
exit
sea el último comando, por lo que el estado del último comando es 0 (correcto). Puede pretender dormir si lo desea, pero no es necesariostdin
ystdout
todavía están unidos a la terminal virtual a través de SSH, por lo que no se cerrará la conexión. Debe hacer dos cosas adicionales para que finalice la sesión SSH y dejar el comando ejecutándose en segundo plano.stdout
ystderr
para/dev/null
que no sean redirigidos por el terminal virtual que contiene la sesión SSH. Esta es la&>/dev/null
partestdin
a un archivo ilegible de la misma manera. Eso es lo que hace el shell incorporadonohup
.Con solo un comando ejecutándose en segundo plano, desconectado de la terminal en todos los sentidos,
exit
cerrará la sesión y, dado que no hay ningunastdin
ostdout
queda en la terminal virtual, SSH terminará la conexión sin errores.fuente
Yo uso el siguiente comando:
ssh -t <hostname> 'sudo shutdown --reboot 0 && exit'
Esto es lo que está haciendo esto:
fuente
Has intentado lo siguiente
Me parece que en algunos sistemas en los que trabajé en el pase, el comando de reinicio tuvo algunos problemas. Por otra parte, no puedo encontrar nada en la página de manual de apagado que haría lo mismo que reiniciar con la bandera -f.
fuente
¿Qué tal salir de la sesión ssh y reiniciar el sistema usando el siguiente comando:
Después de esto, simplemente presione Ctrl + C para terminar ssh.
fuente
Encontré una solución para esto que podría ser útil para otros también. Usé el siguiente comando para cerrar la conexión justo después de iniciar el comando adjunto a ssh:
No entiendo exactamente la razón por la cual este comando obliga a cerrar la conexión, pero al menos fue útil para mí. Si alguien entiende por qué mata la conexión ssh; por favor explique.
fuente
Esto requiere un retraso de 1 minuto, pero ha funcionado de manera confiable para mí y resuelve el problema del bloqueo del cliente SSH:
Esto programa el apagado del sistema para 1 minuto más tarde, lo que permite que finalice el cierre de sesión y, por lo tanto, la finalización de SSH. Si desea esperar el menor tiempo posible, se podría reemplazar el
+1
conHH:MM
un tiempo que se acercaba rápidamente del día, pero que puede ser difícil de tiempo correctamente y puede tener hasta 59 segundos de retraso.fuente
Una manera simple que he encontrado es ordenar el apagado / reinicio como una tarea en segundo plano (usando '&'), protegiéndolo de que se cierre cuando la sesión se cierra con 'nohup', junto con la salida inmediata de shell / sesión:
nohup shutdown -r now & exit
De esta forma, el cliente SSH no se bloquea, ya que la sesión se cierra de inmediato, mientras que el sistema remoto continúa con el reinicio de forma asincrónica.
fuente
Prueba este comando:
fuente
reboot -f
.