Allow sysadmins to define a maintenance window where heavier jobs can run

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling
2022-01-31 17:59:09 +01:00
parent b765f79368
commit 3fd55cb4df
2 changed files with 37 additions and 1 deletions
+23 -1
View File
@@ -110,6 +110,28 @@ try {
$config->setAppValue('core', 'backgroundjobs_mode', 'cron');
}
// Low-load hours
$onlyTimeSensitive = false;
$startHour = $config->getSystemValueInt('maintenance_window_start', 100);
if ($startHour <= 23) {
$date = new \DateTime('now', new \DateTimeZone('UTC'));
$currentHour = (int) $date->format('G');
$endHour = $startHour + 4;
if ($startHour <= 20) {
// Start time: 01:00
// End time: 05:00
// Only run sensitive tasks when it's before the start or after the end
$onlyTimeSensitive = $currentHour < $startHour || $currentHour > $endHour;
} else {
// Start time: 23:00
// End time: 03:00
$endHour -= 24; // Correct the end time from 27:00 to 03:00
// Only run sensitive tasks when it's after the end and before the start
$onlyTimeSensitive = $currentHour > $endHour && $currentHour < $startHour;
}
}
// Work
$jobList = \OC::$server->getJobList();
@@ -119,7 +141,7 @@ try {
$endTime = time() + 14 * 60;
$executedJobs = [];
while ($job = $jobList->getNext()) {
while ($job = $jobList->getNext($onlyTimeSensitive)) {
if (isset($executedJobs[$job->getId()])) {
$jobList->unlockJob($job);
break;