mirror of
https://github.com/nextcloud/server.git
synced 2026-04-20 22:00:39 -04:00
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:
parent
b765f79368
commit
3fd55cb4df
2 changed files with 37 additions and 1 deletions
|
|
@ -1214,6 +1214,20 @@ $CONFIG = [
|
|||
*/
|
||||
'maintenance' => false,
|
||||
|
||||
/**
|
||||
* UTC Hour for maintenance windows
|
||||
*
|
||||
* Some background jobs only run once a day. When an hour is defined for this config,
|
||||
* the background jobs which advertise themselves as not time sensitive will be
|
||||
* delayed during the "working" hours and only run in the 4 hours after the given time.
|
||||
* This is e.g. used for activity expiration, suspicious login training and update checks.
|
||||
*
|
||||
* A value of 1 e.g. will only run these background jobs between 01:00am UTC and 05:00am UTC.
|
||||
*
|
||||
* Defaults to ``100`` which disables the feature
|
||||
*/
|
||||
'maintenance_window_start' => 1,
|
||||
|
||||
|
||||
/**
|
||||
* SSL
|
||||
|
|
|
|||
24
cron.php
24
cron.php
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue