backups: run cron schedule per target
This commit is contained in:
40
src/cron.js
40
src/cron.js
@@ -43,11 +43,12 @@ const appHealthMonitor = require('./apphealthmonitor.js'),
|
||||
safe = require('safetydance'),
|
||||
scheduler = require('./scheduler.js'),
|
||||
system = require('./system.js'),
|
||||
updater = require('./updater.js');
|
||||
updater = require('./updater.js'),
|
||||
util = require('util');
|
||||
|
||||
const gJobs = {
|
||||
autoUpdater: null,
|
||||
backup: null,
|
||||
backups: new Map(),
|
||||
updateChecker: null,
|
||||
systemChecks: null,
|
||||
mailStatusCheck: null,
|
||||
@@ -178,7 +179,6 @@ async function startJobs() {
|
||||
start: true
|
||||
});
|
||||
|
||||
|
||||
gJobs.checkDomainConfigs = CronJob.from({
|
||||
cronTime: `00 ${minute} 5 * * *`, // once a day
|
||||
onTick: async () => await safe(domains.checkConfigs(AuditSource.CRON), { debug }),
|
||||
@@ -203,7 +203,9 @@ async function startJobs() {
|
||||
start: true
|
||||
});
|
||||
|
||||
await handleBackupScheduleChanged(await backupTargets._getDefault());
|
||||
for (const backupTarget of await backupTargets.list(1, 100)) {
|
||||
await handleBackupScheduleChanged(backupTarget);
|
||||
}
|
||||
await handleAutoupdatePatternChanged(await updater.getAutoupdatePattern());
|
||||
await handleDynamicDnsChanged(await network.getDynamicDns());
|
||||
await handleExternalLdapChanged(await externalLdap.getConfig());
|
||||
@@ -214,17 +216,24 @@ async function handleBackupScheduleChanged(target) {
|
||||
|
||||
const tz = await cloudron.getTimeZone();
|
||||
|
||||
debug(`backupPolicyChanged: schedule ${target.schedule} (${tz})`);
|
||||
debug(`handleBackupScheduleChanged: schedule ${target.schedule} (${tz})`);
|
||||
|
||||
if (gJobs.backup) gJobs.backup.stop();
|
||||
gJobs.backup = null;
|
||||
if (gJobs.backups.has(target.id)) gJobs.backups.get(target.id).stop();
|
||||
gJobs.backups.delete(target.id);
|
||||
|
||||
gJobs.backup = CronJob.from({
|
||||
if (target.schedule === constants.CRON_PATTERN_NEVER) return;
|
||||
|
||||
const job = CronJob.from({
|
||||
cronTime: target.schedule,
|
||||
onTick: async () => await safe(backupTargets.startBackupTask(AuditSource.CRON), { debug }),
|
||||
onTick: async () => {
|
||||
const target = await backupTargets.get(target.id);
|
||||
if (!target) return;
|
||||
await safe(backupTargets.startBackupTask(target, AuditSource.CRON), { debug });
|
||||
},
|
||||
start: true,
|
||||
timeZone: tz
|
||||
});
|
||||
gJobs.backups.set(target.id, job);
|
||||
}
|
||||
|
||||
async function handleTimeZoneChanged(tz) {
|
||||
@@ -290,9 +299,14 @@ async function handleExternalLdapChanged(config) {
|
||||
}
|
||||
|
||||
async function stopJobs() {
|
||||
for (const job in gJobs) {
|
||||
if (!gJobs[job]) continue;
|
||||
gJobs[job].stop();
|
||||
gJobs[job] = null;
|
||||
for (const jobName in gJobs) {
|
||||
if (!gJobs[jobName]) continue;
|
||||
if (util.types.isMap(gJobs[jobName])) {
|
||||
gJobs[jobName].forEach((job) => job.stop());
|
||||
gJobs[jobName] = new Map();
|
||||
} else {
|
||||
gJobs[jobName].stop();
|
||||
gJobs[jobName] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user