diff --git a/boot.php b/boot.php index 5cc3499311..fe4e5a2757 100644 --- a/boot.php +++ b/boot.php @@ -30,7 +30,7 @@ require_once('include/cache.php'); require_once('library/Mobile_Detect/Mobile_Detect.php'); require_once('include/features.php'); require_once('include/identity.php'); - +require_once('include/pidfile.php'); require_once('update.php'); require_once('include/dbstructure.php'); @@ -1098,6 +1098,41 @@ class App { return($this->is_friendica_app); } + function maxload_reached() { + + $maxsysload = intval(get_config('system', 'maxloadavg')); + if ($maxsysload < 1) + $maxsysload = 50; + + $load = current_load(); + if ($load) { + if (intval($load) > $maxsysload) { + logger('system: load '.$load.' too high.'); + return true; + } + } + return false; + } + + function is_already_running($task, $taskname, $timeout = 540) { + + $lockpath = get_lockpath(); + if ($lockpath != '') { + $pidfile = new pidfile($lockpath, $taskname); + if ($pidfile->is_already_running()) { + logger("Already running"); + if ($pidfile->running_time() > $timeout) { + $pidfile->kill(); + logger("killed stale process"); + // Calling a new instance + if ($task != "") + proc_run('php', $task); + } + return true; + } + } + return false; + } } /** diff --git a/include/cron.php b/include/cron.php index 6143281710..1c3297c932 100644 --- a/include/cron.php +++ b/include/cron.php @@ -34,7 +34,6 @@ function cron_run(&$argv, &$argc){ require_once('include/Contact.php'); require_once('include/email.php'); require_once('include/socgraph.php'); - require_once('include/pidfile.php'); require_once('mod/nodeinfo.php'); load_config('config'); @@ -42,32 +41,10 @@ function cron_run(&$argv, &$argc){ // Don't check this stuff if the function is called by the poller if (App::callstack() != "poller_run") { - $maxsysload = intval(get_config('system','maxloadavg')); - if($maxsysload < 1) - $maxsysload = 50; - - $load = current_load(); - if($load) { - if(intval($load) > $maxsysload) { - logger('system: load '.$load.' too high. cron deferred to next scheduled run.'); - return; - } - } - - $lockpath = get_lockpath(); - if ($lockpath != '') { - $pidfile = new pidfile($lockpath, 'cron'); - if($pidfile->is_already_running()) { - logger("cron: Already running"); - if ($pidfile->running_time() > 9*60) { - $pidfile->kill(); - logger("cron: killed stale process"); - // Calling a new instance - proc_run('php','include/cron.php'); - } - exit; - } - } + if (App::maxload_reached()) + return; + if (App::is_already_running('include/cron.php', 'cron', 540)) + return; } $last = get_config('system','last_cron'); diff --git a/include/cronhooks.php b/include/cronhooks.php index 71cb0fb7b2..22812fb864 100644 --- a/include/cronhooks.php +++ b/include/cronhooks.php @@ -19,39 +19,16 @@ function cronhooks_run(&$argv, &$argc){ require_once('include/session.php'); require_once('include/datetime.php'); - require_once('include/pidfile.php'); load_config('config'); load_config('system'); // Don't check this stuff if the function is called by the poller if (App::callstack() != "poller_run") { - $maxsysload = intval(get_config('system','maxloadavg')); - if($maxsysload < 1) - $maxsysload = 50; - - $load = current_load(); - if($load) { - if(intval($load) > $maxsysload) { - logger('system: load ' . $load . ' too high. Cronhooks deferred to next scheduled run.'); - return; - } - } - - $lockpath = get_lockpath(); - if ($lockpath != '') { - $pidfile = new pidfile($lockpath, 'cronhooks'); - if($pidfile->is_already_running()) { - logger("cronhooks: Already running"); - if ($pidfile->running_time() > 19*60) { - $pidfile->kill(); - logger("cronhooks: killed stale process"); - // Calling a new instance - proc_run('php','include/cronhooks.php'); - } - exit; - } - } + if (App::maxload_reached()) + return; + if (App::is_already_running('include/cronhooks.php', 'cronhooks', 1140)) + return; } $last = get_config('system','last_cronhook'); diff --git a/include/delivery.php b/include/delivery.php index 021ceb9968..e5ca0946b3 100644 --- a/include/delivery.php +++ b/include/delivery.php @@ -57,17 +57,8 @@ function delivery_run(&$argv, &$argc){ continue; } - $maxsysload = intval(get_config('system','maxloadavg')); - if($maxsysload < 1) - $maxsysload = 50; - - $load = current_load(); - if($load) { - if(intval($load) > $maxsysload) { - logger('system: load ' . $load . ' too high. Delivery deferred to next queue run.'); - return; - } - } + if (App::maxload_reached()) + return; // It's ours to deliver. Remove it from the queue. diff --git a/include/discover_poco.php b/include/discover_poco.php index 550c9897be..8ba2bb2365 100644 --- a/include/discover_poco.php +++ b/include/discover_poco.php @@ -20,25 +20,14 @@ function discover_poco_run(&$argv, &$argc){ require_once('include/session.php'); require_once('include/datetime.php'); - require_once('include/pidfile.php'); load_config('config'); load_config('system'); // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - $maxsysload = intval(get_config('system','maxloadavg')); - if($maxsysload < 1) - $maxsysload = 50; - - $load = current_load(); - if($load) { - if(intval($load) > $maxsysload) { - logger('system: load '.$load.' too high. discover_poco deferred to next scheduled run.'); - return; - } - } - } + if (App::callstack() != "poller_run") + if (App::maxload_reached()) + return; if(($argc > 2) && ($argv[1] == "dirsearch")) { $search = urldecode($argv[2]); @@ -54,23 +43,9 @@ function discover_poco_run(&$argv, &$argc){ die("Unknown or missing parameter ".$argv[1]."\n"); // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - $lockpath = get_lockpath(); - if ($lockpath != '') { - $pidfile = new pidfile($lockpath, 'discover_poco'.$mode.urlencode($search)); - if($pidfile->is_already_running()) { - logger("discover_poco: Already running"); - if ($pidfile->running_time() > 19*60) { - $pidfile->kill(); - logger("discover_poco: killed stale process"); - // Calling a new instance - if ($mode == 0) - proc_run('php','include/discover_poco.php'); - } - exit; - } - } - } + if (App::callstack() != "poller_run") + if (App::is_already_running('include/discover_poco.php', 'discover_poco'.$mode.urlencode($search), 1140)) + return; $a->set_baseurl(get_config('system','url')); diff --git a/include/onepoll.php b/include/onepoll.php index 8b91070dcc..4d270f6135 100644 --- a/include/onepoll.php +++ b/include/onepoll.php @@ -31,7 +31,6 @@ function onepoll_run(&$argv, &$argc){ require_once('include/Contact.php'); require_once('include/email.php'); require_once('include/socgraph.php'); - require_once('include/pidfile.php'); require_once('include/queue_fn.php'); load_config('config'); @@ -61,20 +60,9 @@ function onepoll_run(&$argv, &$argc){ } // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - $lockpath = get_lockpath(); - if ($lockpath != '') { - $pidfile = new pidfile($lockpath, 'onepoll'.$contact_id); - if ($pidfile->is_already_running()) { - logger("onepoll: Already running for contact ".$contact_id); - if ($pidfile->running_time() > 9*60) { - $pidfile->kill(); - logger("killed stale process"); - } - exit; - } - } - } + if (App::callstack() != "poller_run") + if (App::is_already_running('', 'onepoll'.$contact_id, 540)) + return; $d = datetime_convert(); diff --git a/include/poller.php b/include/poller.php index 755862eb6b..7ffd47aa68 100644 --- a/include/poller.php +++ b/include/poller.php @@ -29,17 +29,8 @@ function poller_run(&$argv, &$argc){ if (poller_max_connections_reached()) return; - $load = current_load(); - if($load) { - $maxsysload = intval(get_config('system','maxloadavg')); - if($maxsysload < 1) - $maxsysload = 50; - - if(intval($load) > $maxsysload) { - logger('system: load ' . $load . ' too high. poller deferred to next scheduled run.'); - return; - } - } + if (App::maxload_reached()) + return; // Checking the number of workers if (poller_too_much_workers(1)) { diff --git a/include/pubsubpublish.php b/include/pubsubpublish.php index e7a55f5f09..b438b36e6b 100644 --- a/include/pubsubpublish.php +++ b/include/pubsubpublish.php @@ -74,28 +74,14 @@ function pubsubpublish_run(&$argv, &$argc){ }; require_once('include/items.php'); - require_once('include/pidfile.php'); load_config('config'); load_config('system'); // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - $lockpath = get_lockpath(); - if ($lockpath != '') { - $pidfile = new pidfile($lockpath, 'pubsubpublish'); - if($pidfile->is_already_running()) { - logger("Already running"); - if ($pidfile->running_time() > 9*60) { - $pidfile->kill(); - logger("killed stale process"); - // Calling a new instance - proc_run('php',"include/pubsubpublish.php"); - } - return; - } - } - } + if (App::callstack() != "poller_run") + if (App::is_already_running("include/pubsubpublish.php", 'pubsubpublish', 540)) + return; $a->set_baseurl(get_config('system','url')); diff --git a/include/queue.php b/include/queue.php index 157fc88d94..1222199c70 100644 --- a/include/queue.php +++ b/include/queue.php @@ -22,29 +22,15 @@ function queue_run(&$argv, &$argc){ require_once("include/datetime.php"); require_once('include/items.php'); require_once('include/bbcode.php'); - require_once('include/pidfile.php'); require_once('include/socgraph.php'); load_config('config'); load_config('system'); // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - $lockpath = get_lockpath(); - if ($lockpath != '') { - $pidfile = new pidfile($lockpath, 'queue'); - if($pidfile->is_already_running()) { - logger("queue: Already running"); - if ($pidfile->running_time() > 9*60) { - $pidfile->kill(); - logger("queue: killed stale process"); - // Calling a new instance - proc_run('php',"include/queue.php"); - } - return; - } - } - } + if (App::callstack() != "poller_run") + if (App::is_already_running('include/queue.php', 'queue', 540)) + return; $a->set_baseurl(get_config('system','url')); diff --git a/include/update_gcontact.php b/include/update_gcontact.php index b7bf25aa24..25c11806a2 100644 --- a/include/update_gcontact.php +++ b/include/update_gcontact.php @@ -16,7 +16,6 @@ function update_gcontact_run(&$argv, &$argc){ unset($db_host, $db_user, $db_pass, $db_data); }; - require_once('include/pidfile.php'); require_once('include/Scrape.php'); require_once("include/socgraph.php"); @@ -38,20 +37,9 @@ function update_gcontact_run(&$argv, &$argc){ } // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - $lockpath = get_lockpath(); - if ($lockpath != '') { - $pidfile = new pidfile($lockpath, 'update_gcontact'.$contact_id); - if ($pidfile->is_already_running()) { - logger("update_gcontact: Already running for contact ".$contact_id); - if ($pidfile->running_time() > 9*60) { - $pidfile->kill(); - logger("killed stale process"); - } - exit; - } - } - } + if (App::callstack() != "poller_run") + if (App::is_already_running('', 'update_gcontact'.$contact_id, 540)) + return; $r = q("SELECT * FROM `gcontact` WHERE `id` = %d", intval($contact_id));