Compare commits
No commits in common. "master" and "v0.1.2" have entirely different histories.
@ -47,10 +47,6 @@ def parse_args():
|
||||
'-L', '--no-lock',
|
||||
help='Allow multiple simultanious executions of this cron job',
|
||||
action='store_true')
|
||||
parser.add_argument(
|
||||
'-r', '--restart',
|
||||
help='Restart the process if not running; exit with success if previous instance is running',
|
||||
action='store_true')
|
||||
|
||||
|
||||
parser.add_argument(
|
||||
@ -108,7 +104,7 @@ def exec_command(args, outfile, errfile, resfile):
|
||||
proc.terminate()
|
||||
proc.communicate(timeout=10)
|
||||
|
||||
now=datetime.datetime.now()
|
||||
now=datetime.datetime.utcnow()
|
||||
nowstr=now.strftime('%Y-%m-%d_%H%M.%S')
|
||||
resfile.write('{}\n{}'.format(nowstr, proc.returncode))
|
||||
return proc.returncode
|
||||
@ -163,15 +159,12 @@ def print_runs(runs, clean=True):
|
||||
print("\n\n")
|
||||
if clean:
|
||||
for run in runs:
|
||||
try:
|
||||
shutil.rmtree(run)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
def main():
|
||||
time_format = '%Y-%m-%d_%H%M'
|
||||
args = parse_args()
|
||||
now = datetime.datetime.now()
|
||||
now = datetime.datetime.utcnow()
|
||||
nowstr = now.strftime(time_format)
|
||||
libdir = os.path.join(args.cachedir[0], args.name, nowstr)
|
||||
lckdir = os.path.join(args.lockdir[0], args.name)
|
||||
@ -185,16 +178,9 @@ def main():
|
||||
resfile = os.path.join(libdir, 'result')
|
||||
|
||||
success = True
|
||||
has_lock = True
|
||||
with open(outfile, 'w') as o, open(errfile, 'w+') as e, open(resfile, 'w') as r:
|
||||
if args.no_lock:
|
||||
if args.no_lock or aquire_lock(lckfile):
|
||||
res = exec_command(args, o, e, r)
|
||||
else:
|
||||
has_lock = aquire_lock(lckfile)
|
||||
if has_lock:
|
||||
res = exec_command(args, o, e, r)
|
||||
elif args.restart:
|
||||
res = 0
|
||||
else:
|
||||
e.write("CRONWRAPPER: Unable to aquire lock, previous instance still running?\n")
|
||||
r.write("\nFalse\n")
|
||||
@ -218,16 +204,10 @@ def main():
|
||||
|
||||
previous_runs = {}
|
||||
for root, dirs, files in os.walk(os.path.join(args.cachedir[0], args.name)):
|
||||
for d in dirs:
|
||||
if datetime.datetime.strptime(d, time_format) < datetime.datetime.strptime(nowstr, time_format):
|
||||
with open(os.path.join(root, d, 'result'), 'r') as f:
|
||||
try:
|
||||
retcode = f.read().splitlines()[-1]
|
||||
except IndexError:
|
||||
# Previous run is probably not completed yet, ignore
|
||||
# this entry
|
||||
continue
|
||||
previous_runs[os.path.join(root, d)] = datetime.datetime.strptime(d, time_format)
|
||||
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 success:
|
||||
@ -235,10 +215,7 @@ def main():
|
||||
if previous_runs:
|
||||
print("Success after {} failed runs\n".format(len(previous_runs)))
|
||||
print_runs(previous_runs.keys())
|
||||
try:
|
||||
shutil.rmtree(libdir)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return 0
|
||||
|
||||
|
||||
@ -260,7 +237,6 @@ def main():
|
||||
print("Cronjob failed\n")
|
||||
print_runs([libdir], clean=False)
|
||||
|
||||
if has_lock:
|
||||
release_lock(lckfile)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
Loading…
Reference in New Issue
Block a user