From b9c04b8b0038ba01721e2a23675e00eedebb2bc9 Mon Sep 17 00:00:00 2001 From: Fredrik Eriksson Date: Thu, 17 Dec 2020 12:05:42 +0100 Subject: [PATCH] fixed custom naming of cron job and possible better error handling when --no-lock is used --- cronwrapper/__init__.py | 55 ++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/cronwrapper/__init__.py b/cronwrapper/__init__.py index 212a295..4712ece 100755 --- a/cronwrapper/__init__.py +++ b/cronwrapper/__init__.py @@ -166,18 +166,19 @@ def main(): args = parse_args() now = datetime.datetime.utcnow() nowstr = now.strftime(time_format) - libdir = os.path.join(args.cachedir[0], args.name[0], nowstr) - lckdir = os.path.join(args.lockdir[0], args.name[0]) + libdir = os.path.join(args.cachedir[0], args.name, nowstr) + lckdir = os.path.join(args.lockdir[0], args.name) os.makedirs(lckdir, exist_ok=True) os.makedirs(libdir) - lckfile = os.path.join(lckdir, args.name[0]) + lckfile = os.path.join(lckdir, args.name) outfile = os.path.join(libdir, 'stdout') errfile = os.path.join(libdir, 'stderr') resfile = os.path.join(libdir, 'result') - with open(outfile, 'w') as o, open(errfile, 'w') as e, open(resfile, 'w') as r: + success = True + with open(outfile, 'w') as o, open(errfile, 'w+') as e, open(resfile, 'w') as r: if args.no_lock or aquire_lock(lckfile): res = exec_command(args, o, e, r) else: @@ -185,34 +186,38 @@ def main(): r.write("\nFalse\n") res = False + if res in args.success_exit_codes: + # Possible success, check error output + re_checks = [re.compile(r) for r in args.ignore_error] + e.seek(0) + for line in e: + success = False + for r in re_checks: + if re.match(r, line): + success = True + break + if not success: + break + else: + success = False + + previous_runs = {} - for root, dirs, files in os.walk(os.path.join(args.cachedir[0], args.name[0])): + for root, dirs, files in os.walk(os.path.join(args.cachedir[0], args.name)): previous_runs = { os.path.join(root, d): datetime.datetime.strptime(d, time_format) for d in dirs if datetime.datetime.strptime(d, time_format) < datetime.datetime.strptime(nowstr, time_format)} break - if res in args.success_exit_codes: - # Possible success, check error output - re_checks = [re.compile(r) for r in args.ignore_error] - ok = True - with open(errfile, 'r') as f: - for line in f: - ok = False - for r in re_checks: - if re.match(r, line): - ok = True - break - if not ok: - break - if ok: - # Yes! Success! report any errors until now - if previous_runs: - print("Success after {} failed runs\n".format(len(previous_runs))) - print_runs(previous_runs.keys()) - shutil.rmtree(libdir) - return 0 + if success: + # Yes! Success! report any errors until now + if previous_runs: + print("Success after {} failed runs\n".format(len(previous_runs))) + print_runs(previous_runs.keys()) + shutil.rmtree(libdir) + return 0 + # Failure if previous_runs: