Quiero comenzar un proceso usando nohup en una máquina remota a través de ssh. El problema es cómo iniciar el PID del proceso con nohup, por lo que el "proceso realmente hace algo", no una instancia de shell externo o similar. También, quiero almacenar stdout y stderr en los archivos, pero ese no es el tema aquí ...Obtener el PID de un proceso iniciado con nohup a través de ssh
A nivel local, que funciona a la perfección usando
nohup sleep 30 > out 2> err < /dev/null & echo $!
Me está haciendo eco del PID exacta de la orden " sleep 30 ", que también puedo ver usando" top "o" ps aux | grep sleep ".
Pero estoy teniendo problemas para hacerlo de forma remota a través de ssh. Intenté algo como
ssh remote_machine 'nohup bash -c "((sleep 30) &)" > out 2> err < /dev/null'
pero no puedo encontrar dónde colocar el "echo $!" para que se muestre en mi shell local. Siempre me está mostrando PID incorrectos, por ejemplo, el de la instancia "bash", etc.
¿Alguien tiene una idea de cómo solucionar esto?
EDITAR: Bien, el "bash -c" podría no ser necesario aquí. Al igual que Lotharyx señaló, consigo el PID derecha bien utilizando
ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!'
pero entonces el problema es que si se sustituye "el sueño de 30" con algo que produce una salida, por ejemplo, "echo Hello World!", Que la producción no termina en el archivo "fuera", ni en el lado local ni en el remoto. Alguien tiene una idea de por qué?
EDIT2: ¡Mi error! ¡Simplemente no quedaba espacio en el otro dispositivo, por eso los archivos "fuera" y "error" quedaron vacíos!
Así que esto está funcionando. Además, si se quiere llamar a varios comandos en una fila, separados por un punto y coma (;), se puede seguir utilizando "fiesta -c", así:
ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < /dev/null & echo $!'
Luego se imprime el PID del "bash -c" en el lado local, lo cual está bien. (Es imposible obtener el PID del proceso "más interno" o "ocupado", porque cada programa en sí puede engendrar nuevos subprocesos, no hay forma de averiguarlo ...)
Hmm, tienes razón, pero todavía parece haber un problema con la stdout. Por ejemplo, si sustituyo "sleep 30" con algo que está produciendo salida, como "echo Hello World!", No termina en el archivo "out", sino que me lo devuelve como el PID. –
Creo que agregué el "bash -c" porque quería ejecutar varios comandos seguidos, como "echo foo; sleep 30; echo bar". –
¡Mi error, su solución está funcionando absolutamente! –