diff --git a/spalloc/_keepalive_process.py b/spalloc/_keepalive_process.py index c358db5d4..49135b0fc 100644 --- a/spalloc/_keepalive_process.py +++ b/spalloc/_keepalive_process.py @@ -1,6 +1,7 @@ """ A script for keeping Spalloc jobs alive, intended to only ever be run\ from the Spalloc client itself. """ +from __future__ import print_function import sys import threading from spalloc.protocol_client import ProtocolClient, ProtocolTimeoutError @@ -65,6 +66,8 @@ def keep_job_alive(hostname, port, job_id, keepalive_period, timeout, if __name__ == "__main__": + print("KEEPALIVE") + sys.stdout.flush() if len(sys.argv) != 7: sys.stderr.write( "wrong # args: should be '" + sys.argv[0] + " hostname port " diff --git a/spalloc/job.py b/spalloc/job.py index a8b9319c8..33f523ec1 100644 --- a/spalloc/job.py +++ b/spalloc/job.py @@ -301,7 +301,16 @@ def __init__(self, *args, **kwargs): self._keepalive_process = subprocess.Popen(map(str, [ sys.executable, "-m", "spalloc._keepalive_process", hostname, port, self.id, self._keepalive, self._timeout, - self._reconnect_delay]), stdin=subprocess.PIPE) + self._reconnect_delay]), stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + first_line = self._keepalive_process.stdout.readline().strip() + if first_line.startswith(b"pydev debugger"): + first_line = self._keepalive_process.stdout.readline().strip() + if len(first_line) == 0: + first_line = self._keepalive_process.stdout.readline().strip() + if first_line != b"KEEPALIVE": + raise Exception("Keepalive process wrote odd line: {}".format( + first_line)) def __enter__(self): """ Convenience context manager for common case where a new job is to