diff --git a/cgi-bin/webnotes/utils/scheduler.py b/cgi-bin/webnotes/utils/scheduler.py index 1f3dcb9c86..69f9c488e5 100644 --- a/cgi-bin/webnotes/utils/scheduler.py +++ b/cgi-bin/webnotes/utils/scheduler.py @@ -82,7 +82,7 @@ class Scheduler: self.connect() self.conn.sql("delete from Event where `event`=%s and db_name=%s", (event, db_name)) - def execute(self, db_name, event): + def execute(self, db_name, event, now): """ Executes event in the specifed db """ @@ -105,7 +105,10 @@ class Scheduler: self.log(db_name, event, ret or 'Ok') except Exception, e: - self.log(db_name, event, webnotes.getTraceback()) + if now: + print webnotes.getTraceback() + else: + self.log(db_name, event, webnotes.getTraceback()) def log(self, db_name, event, traceback): """ @@ -117,17 +120,21 @@ class Scheduler: # delete old logs self.conn.sql("delete from EventLog where executed_on < subdate(curdate(), interval 30 day)") - def run(self): + def run(self, now=0): """ Run scheduled (due) events and reset time for recurring events """ + cond = '' + if not now: + cond = 'where next_execution < NOW()' + el = self.conn.sql("""select `db_name`, `event`, `recurring`, `interval` from `Event` - where next_execution < NOW()""", as_dict=1) + %s""" % cond, as_dict=1) for e in el: # execute the event - self.execute(e['db_name'], e['event']) + self.execute(e['db_name'], e['event'], now) # if recurring, update next_execution if e['recurring']: @@ -165,5 +172,9 @@ if __name__=='__main__': sch = Scheduler() sch.connect() - sch.run() + + if len(sys.argv) > 1 and sys.argv[1]=='run': + sch.run(now=1) + else: + sch.run() \ No newline at end of file