11<?php
22class Core_Cron{
33
4- public static function update_interval ($ code )
4+ public static function update_interval ($ code, $ now = null )
55 {
66 $ bind = array (
77 'record_code ' => $ code ,
8- 'now ' => Phpr_DateTime::now ()->toSqlDateTime ()
8+ 'now ' => $ now ? $ now : Phpr_DateTime::now ()->toSqlDateTime ()
99 );
1010 Db_DbHelper::query ('insert into core_cron_table (record_code, updated_at) values (:record_code, :now) on duplicate key update updated_at =:now ' , $ bind );
1111 }
@@ -53,7 +53,7 @@ public static function queue_job($handler_name, $param_data=array())
5353 Db_DbHelper::query ('insert into core_cron_jobs (handler_name, param_data, created_at) values (:handler_name, :param_data, :now) ' , $ bind );
5454 }
5555
56- private static function execute_cronjobs ()
56+ public static function execute_cronjobs ()
5757 {
5858 // Worker can perform only 5 jobs per run
5959 //
@@ -79,7 +79,7 @@ private static function execute_cronjobs()
7979 }
8080 }
8181
82- private static function execute_crontabs ()
82+ public static function execute_crontabs ()
8383 {
8484
8585 $ modules = Core_ModuleManager::listModules ();
@@ -101,19 +101,23 @@ private static function execute_crontabs()
101101 continue ;
102102
103103
104+ $ now = Phpr_DateTime::now ();
104105 $ last_exec = Phpr_DateTime::parse (self ::get_interval ($ code ), Phpr_DateTime::universalDateTimeFormat);
105106 $ next_exec = $ last_exec ->addMinutes ($ options ['interval ' ]);
106- $ can_execute = Phpr_DateTime:: now () ->compare ($ next_exec );
107+ $ can_execute = $ now ->compare ($ next_exec );
107108
108109 if ($ can_execute == -1 )
109110 continue ;
110111
111-
112112 try
113113 {
114+ self ::update_interval ( $ code );//set last run to now to help prevent repeat triggers on long tasks
114115 $ method = $ options ['method ' ];
115- if ($ module ->$ method ())
116- self ::update_interval ( $ code );
116+ if ($ module ->$ method ()){
117+ self ::update_interval ( $ code ); //time of completion
118+ } else {
119+ self ::update_interval ( $ code , $ last_exec ); //not run, revert to last completed time
120+ }
117121
118122 }
119123 catch (Exception $ ex )
0 commit comments