Domanda

Non riesco a ottenere tessuto di bel gioco con backgrounding un processo che ho utilizzato su nohup. . . Dovrebbe essere possibile, dato diverse informazioni, tra cui qui e qui .

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"

uscita abbreviato:

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

So che non ci sono problemi con il comando tunnel di per sé, perché se la spoglierò via la roba nohup funziona benissimo (ma si blocca, ovviamente, tessuto). Sono abbastanza sicuro che non è adeguatamente sempre staccato e quando la funzione di esecuzione restituisce il processo di tunnel è immediatamente morendo.

Ma perché?

Questo accade anche con un comando python in un'altra parte del mio codice.

È stato utile?

Soluzione

Così, sembra dopo molto dispute che questo non è possibile per qualsiasi motivo con la mia configurazione (di default Ubuntu installa su EC2 istanze). Non ho idea del perché e come sembra possibile secondo diverse fonti.

Ho risolto il mio problema particolare utilizzando paramiko al posto di tessuto, per le chiamate che devono essere lasciato in esecuzione in background. Di seguito realizza questo:

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top