X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FCron.php;h=0cf5e263232e9039193b58146ce29c27a28b50ef;hb=60532ee7e4152af9997e0d7b69c7b35262d5528d;hp=ad50707c49dd378ba056332153a40dc62beb45fd;hpb=4bb70d759342778538b1f51f7ff43c10aa07a233;p=friendica.git diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index ad50707c49..0cf5e26323 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -1,6 +1,6 @@ time()) { - Logger::log('cron intervall not reached'); + Logger::notice('cron intervall not reached'); return; } } - Logger::log('cron: start'); + Logger::notice('start'); + + // Ensure to have a .htaccess file. + // this is a precaution for systems that update automatically + $basepath = $a->getBasePath(); + if (!file_exists($basepath . '/.htaccess') && is_writable($basepath)) { + copy($basepath . '/.htaccess-dist', $basepath . '/.htaccess'); + } + + if (DI::config()->get('system', 'delete_sleeping_processes')) { + self::deleteSleepingProcesses(); + } // Fork the cron jobs in separate parts to avoid problems when one of them is crashing - Hook::fork($a->queue['priority'], "cron"); + Hook::fork(PRIORITY_MEDIUM, 'cron'); + + // Poll contacts + Worker::add(PRIORITY_MEDIUM, 'PollContacts'); + + // Update contact information + Worker::add(PRIORITY_LOW, 'UpdateContacts'); + + // Update server information + Worker::add(PRIORITY_LOW, 'UpdateGServers'); // run the process to update server directories in the background Worker::add(PRIORITY_LOW, 'UpdateServerDirectories'); @@ -60,92 +80,79 @@ class Cron // Call possible post update functions Worker::add(PRIORITY_LOW, 'PostUpdate'); - // Repair entries in the database - Worker::add(PRIORITY_LOW, 'RepairDatabase'); + // Hourly cron calls + if (DI::config()->get('system', 'last_cron_hourly', 0) + 3600 < time()) { - // once daily run birthday_updates and then expire in background - $d1 = DI::config()->get('system', 'last_expire_day'); - $d2 = intval(DateTimeFormat::utcNow('d')); + // Update trending tags cache for the community page + Tag::setLocalTrendingHashtags(24, 20); + Tag::setGlobalTrendingHashtags(24, 20); - // Daily cron calls - if ($d2 != intval($d1)) { + // Search for new contacts in the directory + if (DI::config()->get('system', 'synchronize_directory')) { + Worker::add(PRIORITY_LOW, 'PullDirectory'); + } - Worker::add(PRIORITY_LOW, 'UpdateContactBirthdays'); + // Delete all done workerqueue entries + Worker::add(PRIORITY_LOW, 'CleanWorkerQueue'); - Worker::add(PRIORITY_LOW, 'UpdatePhotoAlbums'); + // Clear cache entries + Worker::add(PRIORITY_LOW, 'ClearCache'); - // update nodeinfo data - Worker::add(PRIORITY_LOW, 'NodeInfo'); + DI::config()->set('system', 'last_cron_hourly', time()); + } - Worker::add(PRIORITY_LOW, 'UpdateGServers'); + // Daily maintenance cron calls + if (Worker::isInMaintenanceWindow(true)) { - Worker::add(PRIORITY_LOW, 'Expire'); + Worker::add(PRIORITY_LOW, 'UpdateContactBirthdays'); - Worker::add(PRIORITY_MEDIUM, 'DBClean'); + Worker::add(PRIORITY_LOW, 'UpdatePhotoAlbums'); + + Worker::add(PRIORITY_LOW, 'ExpirePosts'); Worker::add(PRIORITY_LOW, 'ExpireConversations'); - Worker::add(PRIORITY_LOW, 'CleanItemUri'); + Worker::add(PRIORITY_LOW, 'RemoveUnusedTags'); + + Worker::add(PRIORITY_LOW, 'RemoveUnusedContacts'); + + Worker::add(PRIORITY_LOW, 'RemoveUnusedAvatars'); // check upstream version? Worker::add(PRIORITY_LOW, 'CheckVersion'); - Worker::add(PRIORITY_LOW, 'CheckdeletedContacts'); + Worker::add(PRIORITY_LOW, 'CheckDeletedContacts'); if (DI::config()->get('system', 'optimize_tables')) { Worker::add(PRIORITY_LOW, 'OptimizeTables'); } - DI::config()->set('system', 'last_expire_day', $d2); + DI::config()->set('system', 'last_cron_daily', time()); } - // Hourly cron calls - if (DI::config()->get('system', 'last_cron_hourly', 0) + 3600 < time()) { - - // Search for new contacts in the directory - if (DI::config()->get('system', 'synchronize_directory')) { - Worker::add(PRIORITY_LOW, 'PullDirectory'); - } + Logger::notice('end'); - // Delete all done workerqueue entries - DBA::delete('workerqueue', ['`done` AND `executed` < UTC_TIMESTAMP() - INTERVAL 1 HOUR']); + DI::config()->set('system', 'last_cron', time()); + } - // Optimizing this table only last seconds - if (DI::config()->get('system', 'optimize_tables')) { - // We are acquiring the two locks from the worker to avoid locking problems - if (DI::lock()->acquire(Worker::LOCK_PROCESS, 10)) { - if (DI::lock()->acquire(Worker::LOCK_WORKER, 10)) { - DBA::e("OPTIMIZE TABLE `workerqueue`"); - DBA::e("OPTIMIZE TABLE `process`"); - DI::lock()->release(Worker::LOCK_WORKER); - } - DI::lock()->release(Worker::LOCK_PROCESS); - } + /** + * Kill sleeping database processes + * + * @return void + */ + private static function deleteSleepingProcesses() + { + Logger::info('Looking for sleeping processes'); + + $processes = DBA::p("SHOW FULL PROCESSLIST"); + while ($process = DBA::fetch($processes)) { + if (($process['Command'] != 'Sleep') || ($process['Time'] < 300) || ($process['db'] != DBA::databaseName())) { + continue; } - // Clear cache entries - Worker::add(PRIORITY_LOW, 'ClearCache'); - - DI::config()->set('system', 'last_cron_hourly', time()); - } - - // Ensure to have a .htaccess file. - // this is a precaution for systems that update automatically - $basepath = $a->getBasePath(); - if (!file_exists($basepath . '/.htaccess') && is_writable($basepath)) { - copy($basepath . '/.htaccess-dist', $basepath . '/.htaccess'); + DBA::e("KILL ?", $process['Id']); + Logger::notice('Killed sleeping process', ['id' => $process['Id']]); } - - // Poll contacts - Worker::add(PRIORITY_HIGH, 'PollContacts'); - - // Update contact information - Worker::add(PRIORITY_LOW, 'UpdatePublicContacts'); - - Logger::log('cron: end'); - - DI::config()->set('system', 'last_cron', time()); - - return; + DBA::close($processes); } }