X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FCron.php;h=439024a4f61837b7a60eaf8514337d4c27ff040e;hb=f36d4891bcf0a0eb4f0243851375966d6e99d201;hp=3eb93ba26d802049550c30fb9fc018f34ee7f154;hpb=34cce68dc623ede54539bde529f90f13515b677b;p=friendica.git diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 3eb93ba26d..439024a4f6 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -1,6 +1,6 @@ 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,77 @@ 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()) { + + // Update trending tags cache for the community page + Tag::setLocalTrendingHashtags(24, 20); + Tag::setGlobalTrendingHashtags(24, 20); - // once daily run birthday_updates and then expire in background - $d1 = DI::config()->get('system', 'last_expire_day'); - $d2 = intval(DateTimeFormat::utcNow('d')); + // Search for new contacts in the directory + if (DI::config()->get('system', 'synchronize_directory')) { + Worker::add(PRIORITY_LOW, 'PullDirectory'); + } - // Daily cron calls - if ($d2 != intval($d1)) { + // Delete all done workerqueue entries + Worker::add(PRIORITY_LOW, 'CleanWorkerQueue'); - Worker::add(PRIORITY_LOW, 'UpdateContactBirthdays'); + // Clear cache entries + Worker::add(PRIORITY_LOW, 'ClearCache'); - Worker::add(PRIORITY_LOW, 'UpdatePhotoAlbums'); + DI::config()->set('system', 'last_cron_hourly', time()); + } - // update nodeinfo data - Worker::add(PRIORITY_LOW, 'NodeInfo'); + // Daily maintenance cron calls + if (Worker::isInMaintenanceWindow(true)) { - Worker::add(PRIORITY_LOW, 'UpdateGServers'); + Worker::add(PRIORITY_LOW, 'UpdateContactBirthdays'); - Worker::add(PRIORITY_LOW, 'Expire'); + Worker::add(PRIORITY_LOW, 'UpdatePhotoAlbums'); - Worker::add(PRIORITY_MEDIUM, 'DBClean'); + Worker::add(PRIORITY_LOW, 'ExpirePosts'); Worker::add(PRIORITY_LOW, 'ExpireConversations'); - Worker::add(PRIORITY_LOW, 'CleanItemUri'); + 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::notice('cron: end'); - - DI::config()->set('system', 'last_cron', time()); - - return; + DBA::close($processes); } }