Quiero ejecutar un script, start.sh
en un servidor remoto que ejecuta esto:
nohup node server.js &
Ingenuamente, llamo a SSH así:
ssh myserver <<EOF
./start.sh &
EOF
Esto inicia el script, pero deja la sesión conectada. Quiero seguir este paso con otros comandos en un script, por lo que no es bueno.
¿Cómo puedo enviar SSH a la máquina remota, iniciar un nohup
comando en segundo plano y luego desconectarme? Supongo que podría poner el proceso SSH en segundo plano, pero eso no parece correcto.
fuente
> /dev/null
.> /dev/null 2>&1
es descartar cualquier salida stdout / stderr redirigiendo al agujero negro lolnohup command2 >> /path/to/command2.log 2>&1 &
en un terminal y luego cierro el terminal que se pierde el proceso?¿Por qué no simplemente tmux o screen y listo? Por ejemplo:
Esto es práctico si es algo que se repetirá continuamente o tardará un tiempo en terminar. Puede desconectarse de la sesión y permanecerá activa.
fuente
no se ejecuta en modo daemon, manteniendo conectada su sesión ssh. La sesión de Ssh volverá en 10 segundos, a pesar de que usó nohup.
La razón es que stdout y stderr remotos todavía están conectados a su sesión. Mantiene la sesión ssh viva, nohup no ayuda.
Esta:
vuelve de inmediato. Inicia el proceso remoto con nohup y sale de la sesión ssh de inmediato.
fuente
Forma más corta:
Parece que bash mismo realiza la desconexión de la terminal, por lo que no se necesita nohup. Ejecuto Ubuntu 14.04 x86_64, bash 4.3.11.
fuente
nohup;
solo genera una queja sobre la falta de argumentos.command 1; command 2; ...
representa el script OP, quiero ejecutarlo. OP también puede usar un caso especial de esta respuesta:ssh myserver ./start.sh &>/dev/null &