Después de tratar de descubrir por qué una tarea de Capistrano (que intentó iniciar un daemon en segundo plano) estaba colgando, descubrí que usar &&
en bash sobre ssh evita que un programa subsiguiente se ejecute en fondo. Lo probé en Bash 4.1.5 y 4.2.20.operador bash && previene el fondo sobre ssh
A continuación se colgará (es decir, para esperar a terminar sleep
) en bash:
ssh localhost "cd /tmp && nohup sleep 10 >/dev/null 2>&1 &"
El siguiente no:
ssh localhost "cd /tmp ; nohup sleep 10 >/dev/null 2>&1 &"
Tampoco lo hará la siguiente:
cd /tmp && nohup sleep 10 >/dev/null 2>&1 &
Tanto zsh como el tablero lo ejecutarán en segundo plano en todos los casos, independientemente de &&
y ssh. ¿Es este comportamiento normal/esperado para bash, o un error?
no sé precisamente la respuesta a su pregunta, pero lo hará decir que ocasionalmente he encontrado irritaciones similares cuando uso SSH, con Bash en el extremo remoto. No sé si el problema es específico de Bash, pero a veces he tenido más suerte usando el comando incorporado de '' repudio '' de Bash en lugar del comando 'nohup'. Si esto te interesa, escribe 'help renunciar | menos' mientras ejecuta Bash. Y si usted aprende de una solución general, por favor publíquela aquí. Me interesaría leer. – thb
En realidad, probé con varias combinaciones de 'renegociar',' nohup' y redirecciones, sin éxito. El '&&' siempre inhibe el fondo. Pude salirse con la tarea de envolver los dos comandos en una subshell, pero eso no es realmente lo mismo. – Hinrik
El comando parece funcionar para mí. ¿A qué te refieres con ahorcado? ¿El 'cd' tarda mucho tiempo? Podría ser un problema con el servidor remoto, p. demasiada carga. – suvayu