Pregunta

Parece que no puedo hacer que la tela juegue bien con el fondo de un proceso en el que he usado Nohup. . . Debe ser posible, dada varias piezas de información, incluida aquí y aquí.

def test():
h = 'xxxxx.compute-1.amazonaws.com'    
ports = [16646, 9090, 6666]

with settings(host_string = h):
    tun_s = "ssh  -o StrictHostKeyChecking=no -i ~/.ssh/kp.pem %s@%s " % (env.user, h)      

    for port in ports:
        p_forward = "-L %d:localhost:%d" % (port, port)
        tun_s = "%s %s" % (tun_s, p_forward)

    tun_s = "%s -N" % tun_s
    # create the tunnel. . .
    print "creating tunnel %s" % tun_s
    run("nohup '%s' >& /dev/null < /dev/null &" % tun_s)
    print "fin"

Salida abreviada:

ubuntu@domU-xxx:~/deploy$ fab test
executing on tunnel ssh  -o StrictHostKeyChecking=no -i ~/.ssh/kp.pem ubuntu@xxx  -L 16646:localhost:16646 -L 9090:localhost:9090 -L 6666:localhost:6666 -N
[xxx.compute-1.amazonaws.com] run: nohup 'ssh  -o StrictHostKeyChecking=no -i ~/.ssh/kp.pem ubuntu@xxx.compute-1.amazonaws.com  -L 16646:localhost:16646 -L 9090:localhost:9090 -L 6666:localhost:6666 -N' >& /dev/null < /dev/null &
fin

Done.
Disconnecting from xxxx

Sé que no hay problema con el comando del túnel per se porque si me quito las cosas de nohup, funciona bien (pero obviamente cuelga de la tela). Estoy bastante seguro de que no se está separando correctamente y cuando la función de ejecución devuelve el proceso del túnel está muriendo inmediatamente.

¿Pero por qué?

Esto también sucede con un comando de Python en otra parte de mi código.

¿Fue útil?

Solución

Por lo tanto, después de mucha disputa, esto no es posible por cualquier razón con mi configuración (Ubuntu predeterminado se instala en instancias EC2). No tengo idea de por qué y como parece posible según varias fuentes.

Solucioné mi problema particular usando Paramiko en lugar de tela, para las llamadas que deben dejarse en funcionamiento en segundo plano. Lo siguiente logra esto:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
privkey = paramiko.RSAKey.from_private_key_file('xxx.pem')
ssh.connect('xxx.compute-1.amazonaws.com', username='ubuntu', pkey=privkey)
stdin, stdout, stderr = ssh.exec_command("nohup ssh  -f -o StrictHostKeyChecking=no -i     ~/.ssh/xxx.pem ubuntu@xxx.compute-1.amazonaws.com -L 16646:localhost:16646 -L -N >& /dev/null < /dev/null &")
ssh.close()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top