From 9ef617317c1b51209aa41b523c122b61c9b23aaf Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 11 Apr 2013 20:40:32 +0100 Subject: Simple implementation --- desktop-cronish | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/desktop-cronish b/desktop-cronish index a67af1e..f69d16e 100755 --- a/desktop-cronish +++ b/desktop-cronish @@ -16,6 +16,8 @@ import cliapp +import time +import yaml __version__ = '0.0' @@ -31,7 +33,48 @@ class DesktopCronish(cliapp.Application): default=0) def process_args(self, args): - pass + self.jobs = {} + self.previously = {} + self.process_inputs(args) + self.execute_jobs() + + def process_input(self, filename): + with self.open_input(filename, 'r') as f: + job_dict = yaml.safe_load(f) + self.jobs.update(job_dict) + + def execute_jobs(self): + n = 0 + max_jobs = self.settings['max-jobs'] + while max_jobs == 0 or n < max_jobs: + job_name, when = self.choose_job() + self.wait_until(when) + self.execute_job(job_name) + n += 1 + + def choose_job(self): + next_job_name = None + next_when = 0 + for job_name, job in self.jobs.items(): + job_when = self.previously.get(job_name, 0) + job['interval'] + if next_job_name is None or job_when <= next_when: + next_job_name = job_name + next_when = job_when + return next_job_name, next_when + + def wait_until(self, when): + while self.now() < when: + time.sleep(when - self.now()) + + def execute_job(self, job_name): + job = self.jobs[job_name] + exit, out, err = cliapp.runcmd_unchecked(['sh', '-c', job['command']]) + self.output.write(out) + if exit != 0: + sys.stderr.write(err) + self.previously[job_name] = self.now() + def now(self): + return time.time() DesktopCronish(version=__version__).run() -- cgit v1.2.1