X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FCron.php;h=cd155dbbbe17b5e625533157737752445b4759c8;hb=a1d57abfe45d832aa36f9615eea35c6900c6f5b8;hp=3eb93ba26d802049550c30fb9fc018f34ee7f154;hpb=34cce68dc623ede54539bde529f90f13515b677b;p=friendica.git diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 3eb93ba26d..cd155dbbbe 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(Worker::PRIORITY_MEDIUM, 'cron'); + + // Poll contacts + Worker::add(Worker::PRIORITY_MEDIUM, 'PollContacts'); + + // Update contact information + Worker::add(Worker::PRIORITY_LOW, 'UpdateContacts'); + + // Update server information + Worker::add(Worker::PRIORITY_LOW, 'UpdateGServers'); // run the process to update server directories in the background - Worker::add(PRIORITY_LOW, 'UpdateServerDirectories'); + Worker::add(Worker::PRIORITY_LOW, 'UpdateServerDirectories'); // Expire and remove user entries - Worker::add(PRIORITY_MEDIUM, 'ExpireAndRemoveUsers'); + Worker::add(Worker::PRIORITY_MEDIUM, 'ExpireAndRemoveUsers'); // Call possible post update functions - Worker::add(PRIORITY_LOW, 'PostUpdate'); + Worker::add(Worker::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')); - // Daily cron calls - if ($d2 != intval($d1)) { + // Update trending tags cache for the community page + Tag::setLocalTrendingHashtags(24, 20); + Tag::setGlobalTrendingHashtags(24, 20); - Worker::add(PRIORITY_LOW, 'UpdateContactBirthdays'); + // Remove old pending posts from the queue + Queue::clear(); - Worker::add(PRIORITY_LOW, 'UpdatePhotoAlbums'); + // Process all unprocessed entries + Queue::processAll(); - // update nodeinfo data - Worker::add(PRIORITY_LOW, 'NodeInfo'); + // Search for new contacts in the directory + if (DI::config()->get('system', 'synchronize_directory')) { + Worker::add(Worker::PRIORITY_LOW, 'PullDirectory'); + } - Worker::add(PRIORITY_LOW, 'UpdateGServers'); + // Clear cache entries + Worker::add(Worker::PRIORITY_LOW, 'ClearCache'); - Worker::add(PRIORITY_LOW, 'Expire'); + DI::config()->set('system', 'last_cron_hourly', time()); + } - Worker::add(PRIORITY_MEDIUM, 'DBClean'); + // Daily maintenance cron calls + if (Worker::isInMaintenanceWindow(true)) { - Worker::add(PRIORITY_LOW, 'ExpireConversations'); + Worker::add(Worker::PRIORITY_LOW, 'UpdateContactBirthdays'); - Worker::add(PRIORITY_LOW, 'CleanItemUri'); + Worker::add(Worker::PRIORITY_LOW, 'UpdatePhotoAlbums'); - // check upstream version? - Worker::add(PRIORITY_LOW, 'CheckVersion'); + Worker::add(Worker::PRIORITY_LOW, 'ExpirePosts'); - Worker::add(PRIORITY_LOW, 'CheckdeletedContacts'); + Worker::add(Worker::PRIORITY_LOW, 'ExpireActivities'); - if (DI::config()->get('system', 'optimize_tables')) { - Worker::add(PRIORITY_LOW, 'OptimizeTables'); - } - - DI::config()->set('system', 'last_expire_day', $d2); - } + Worker::add(Worker::PRIORITY_LOW, 'RemoveUnusedTags'); - // Hourly cron calls - if (DI::config()->get('system', 'last_cron_hourly', 0) + 3600 < time()) { + Worker::add(Worker::PRIORITY_LOW, 'RemoveUnusedContacts'); - // Search for new contacts in the directory - if (DI::config()->get('system', 'synchronize_directory')) { - Worker::add(PRIORITY_LOW, 'PullDirectory'); - } + Worker::add(Worker::PRIORITY_LOW, 'RemoveUnusedAvatars'); + + // check upstream version? + Worker::add(Worker::PRIORITY_LOW, 'CheckVersion'); - // Delete all done workerqueue entries - DBA::delete('workerqueue', ['`done` AND `executed` < UTC_TIMESTAMP() - INTERVAL 1 HOUR']); + Worker::add(Worker::PRIORITY_LOW, 'CheckDeletedContacts'); - // 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); - } + Worker::add(Worker::PRIORITY_LOW, 'OptimizeTables'); } - // Clear cache entries - Worker::add(PRIORITY_LOW, 'ClearCache'); + foreach (User::getList($start=1, $limit=PHP_INT_MAX, $type='active') as $user) { + Worker::add(Worker::PRIORITY_LOW, 'CheckRelMeProfileLink', $user['uid']); + } - DI::config()->set('system', 'last_cron_hourly', time()); - } + // Resubscribe to relay servers + Relay::reSubscribe(); - // 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'); + DI::config()->set('system', 'last_cron_daily', time()); } - // Poll contacts - Worker::add(PRIORITY_HIGH, 'PollContacts'); - - // Update contact information - Worker::add(PRIORITY_LOW, 'UpdatePublicContacts'); - - Logger::notice('cron: end'); + Logger::notice('end'); DI::config()->set('system', 'last_cron', time()); + } + + /** + * 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; + } - return; + DBA::e("KILL ?", $process['Id']); + Logger::notice('Killed sleeping process', ['id' => $process['Id']]); + } + DBA::close($processes); } }