diff options
Diffstat (limited to 'gn_libs/jobs/launcher.py')
| -rw-r--r-- | gn_libs/jobs/launcher.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gn_libs/jobs/launcher.py b/gn_libs/jobs/launcher.py index d565f9e..f915b81 100644 --- a/gn_libs/jobs/launcher.py +++ b/gn_libs/jobs/launcher.py @@ -3,6 +3,7 @@ import os import sys import time import shlex +import signal import logging import argparse import traceback @@ -34,8 +35,13 @@ def run_job(conn, job, outputs_directory: Path): encoding="utf-8", stdout=outfile, stderr=errfile) as process): + jobs.update_metadata(conn, job_id, "status", "running") while process.poll() is None: - jobs.update_metadata(conn, job_id, "status", "running") + _job = jobs.job(conn, job_id, True) + if bool(_job["metadata"].get("hangup_request")): + process.send_signal(signal.SIGHUP) + jobs.update_metadata(conn, job_id, "status", "stopped") + break; jobs.push_to_stream(conn, job_id, "stdout", stdout_in.read()) jobs.push_to_stream(conn, job_id, "stderr", stderr_in.read()) time.sleep(1) @@ -51,7 +57,9 @@ def run_job(conn, job, outputs_directory: Path): if exit_status == 0: jobs.update_metadata(conn, job_id, "status", "completed") else: - jobs.update_metadata(conn, job_id, "status", "error") + _job = jobs.job(conn, job_id, True) + if _job["metadata"]["status"] != "stopped": + jobs.update_metadata(conn, job_id, "status", "error") logger.info("exiting job manager/launcher") return exit_status |
