diff --git a/src/cron.js b/src/cron.js index 72656791f..8e7f71f90 100644 --- a/src/cron.js +++ b/src/cron.js @@ -1,11 +1,22 @@ 'use strict'; +// IMPORTANT: These patterns are together because they spin tasks which acquire a lock +// If the patterns overlap all the time, then the task may not ever get a chance to run! +const DEFAULT_CLEANUP_BACKUPS_PATTERN = '00 30 1,3,5,23 * * *', + DEFAULT_BOX_BACKUP_PATTERN_LT_6HOURS = '00 45 1,7,13,19 * * *', + DEFAULT_BOX_BACKUP_PATTERN_GT_6HOURS = '00 45 1,3,5,23 * * *', + DEFAULT_BOX_AUTOUPDATE_PATTERN = '00 00 1,3,5,23 * * *', + DEFAULT_APP_AUTOUPDATE_PATTERN = '00 15 1,3,5,23 * * *'; + exports = module.exports = { - startJobs: startJobs, + startJobs, - stopJobs: stopJobs, + stopJobs, - handleSettingsChanged: handleSettingsChanged + handleSettingsChanged, + + DEFAULT_BOX_AUTOUPDATE_PATTERN, + DEFAULT_APP_AUTOUPDATE_PATTERN }; var appHealthMonitor = require('./apphealthmonitor.js'), @@ -98,7 +109,7 @@ function startJobs(callback) { }); gJobs.cleanupBackups = new CronJob({ - cronTime: '00 45 1,3,5,23 * * *', // every 6 hours. try not to overlap with ensureBackup job + cronTime: DEFAULT_CLEANUP_BACKUPS_PATTERN, onTick: backups.startCleanupTask.bind(null, auditSource.CRON, NOOP_CALLBACK), start: true }); @@ -177,9 +188,9 @@ function backupConfigChanged(value, tz) { if (gJobs.backup) gJobs.backup.stop(); let pattern; if (value.intervalSecs <= 6 * 60 * 60) { - pattern = '00 45 1,7,13,19 * * *'; // no option but to backup in the middle of the day + pattern = DEFAULT_BOX_BACKUP_PATTERN_LT_6HOURS; // no option but to backup in the middle of the day } else { - pattern = '00 45 1,3,5,23 * * *'; // avoid middle of the day backups. it's 45 to not overlap auto-updates + pattern = DEFAULT_BOX_BACKUP_PATTERN_GT_6HOURS; // avoid middle of the day backups. it's 45 to not overlap auto-updates } gJobs.backup = new CronJob({ diff --git a/src/settings.js b/src/settings.js index f65d8891a..d4f2751bd 100644 --- a/src/settings.js +++ b/src/settings.js @@ -131,8 +131,8 @@ var addons = require('./addons.js'), let gDefaults = (function () { var result = { }; - result[exports.APP_AUTOUPDATE_PATTERN_KEY] = '00 30 1,3,5,23 * * *'; - result[exports.BOX_AUTOUPDATE_PATTERN_KEY] = '00 00 1,3,5,23 * * *'; + result[exports.APP_AUTOUPDATE_PATTERN_KEY] = cron.DEFAULT_APP_AUTOUPDATE_PATTERN; + result[exports.BOX_AUTOUPDATE_PATTERN_KEY] = cron.DEFAULT_BOX_AUTOUPDATE_PATTERN; result[exports.TIME_ZONE_KEY] = 'America/Los_Angeles'; result[exports.CLOUDRON_NAME_KEY] = 'Cloudron'; result[exports.DYNAMIC_DNS_KEY] = false;