X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5126d94fd644a657243e5ec80d5ef1fc250f8b76..1875ddb761e4ae2909d2afe0718f3d0ad5f3ce0f:/crunch_scripts/run-command diff --git a/crunch_scripts/run-command b/crunch_scripts/run-command index 528baab4c1..2eb5589471 100755 --- a/crunch_scripts/run-command +++ b/crunch_scripts/run-command @@ -7,11 +7,14 @@ import subprocess import sys import shutil import subst +import time os.umask(0077) t = arvados.current_task().tmpdir +api = arvados.api('v1') + os.chdir(arvados.current_task().tmpdir) os.mkdir("tmpdir") os.mkdir("output") @@ -34,8 +37,12 @@ def sub_link(v): def sub_tmpdir(v): return os.path.join(arvados.current_task().tmpdir, 'tmpdir') +def sub_cores(v): + return os.environ['CRUNCH_NODE_SLOTS'] + subst.default_subs["link "] = sub_link subst.default_subs["tmpdir"] = sub_tmpdir +subst.default_subs["node.cores"] = sub_cores rcode = 1 @@ -50,24 +57,48 @@ try: stdoutname = subst.do_substitution(p, p["stdout"]) stdoutfile = open(stdoutname, "wb") - print("Running command: {}{}".format(' '.join(cmd), (" > " + stdoutname) if stdoutname != None else "")) + print("run-command: {}{}".format(' '.join(cmd), (" > " + stdoutname) if stdoutname != None else "")) rcode = subprocess.call(cmd, stdout=stdoutfile) + print("run-command: completed with exit code %i" % rcode) + except Exception as e: - print("Caught exception {}".format(e)) + print("run-command: caught exception: {}".format(e)) finally: for l in links: os.unlink(l) + print("run-command: the follow output files will be saved to keep:") + + subprocess.call(["find", ".", "-type", "f", "-printf", "run-command: %12.12s %h/%f\\n"]) + + print("run-command: start writing output to keep") + out = arvados.CollectionWriter() out.write_directory_tree(".", max_manifest_depth=0) - arvados.current_task().set_output(out.finish()) + done = False + while not done: + try: + outuuid = out.finish() + api.job_tasks().update(uuid=arvados.current_task()['uuid'], + body={ + 'output':outuuid, + 'success': (rcode == 0), + 'progress':1.0 + }).execute() + done = True + except Exception as e: + print("run-command: caught exception: {}".format(e)) + time.sleep(5) if rcode == 0: os.chdir("..") shutil.rmtree("tmpdir") shutil.rmtree("output") + print("run-command: success") +else: + print("run-command: failed") sys.exit(rcode)