diff --git a/tes/sshwrapper/__init__.py b/tes/sshwrapper/__init__.py index cea74a6f58038b011f1b1278853cf3a24aef7e91..20161f29cdf272a6b6087b764eaaf61223b2d629 100644 --- a/tes/sshwrapper/__init__.py +++ b/tes/sshwrapper/__init__.py @@ -157,34 +157,25 @@ class Ssh: logger.debug("spanwed ssh mux with pid {}".format(ctrl_p.pid)) #sess.pids.append(ctrl_p.pid) sess.ctrl_processes[ctrlsocket] = ctrl_p - DOUBLECHECK=True - if DOUBLECHECK: - import time - time.sleep(1) + notstarted = True + notdead = True + wait=0 + while notstarted and notdead: ctrl_p.poll() if ctrl_p.returncode != None: + notdead = False (stdout,stderr) = ctrl_p.communicate() logger.error('ctrl_p died {} {} {}'.format(ctrl_p.returncode,stdout,stderr)) - else: - ctrl_p = sess.ctrl_processes[ctrlsocket] - try: - mode = os.stat(ctrlsocket).st_mode - except FileNotFoundError: - import time - time.sleep(5) - try: - mode = os.stat(ctrlsocket).st_mode - except FileNotFoundError: - mode = None - ctrl_p.kill() - (stdout,stderr) = ctrl_p.communicate() - logger.error('control socket error {} {}'.format(stdout,stderr)) - raise SshCtrlException(stderr.decode()) - if not stat.S_ISSOCK(mode): - ctrl_p.kill() - (stdout,stderr) = ctrl_p.communicate() - logger.error('control socket error {} {}'.format(stdout,stderr)) - raise SshCtrlException(stderr.decode()) + raise SshCtrlException(stderr.decode()) + try: + mode = os.stat(ctrlsocket).st_mode + notstarted=False + except FileNotFoundError: + logger.debug('ctrl_p not started yet') + time.sleep(0.5) + wait=wait+1 + if wait>60: + ctrl_p.kill() sess.lock.release() return ctrlsocket