From 0ea42129efc9615ae5644ae274c0f1e5a3e4e2dd Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 13 Jan 2026 10:10:05 +0100 Subject: [PATCH] Automate cron_config.py file creation --- modoboa/core/commands/deploy.py | 13 ++++++++ .../commands/templates/cron_config.py.tpl | 30 +++++++++++++++++++ test_project/test_project/cron_config.py | 6 +--- 3 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 modoboa/core/commands/templates/cron_config.py.tpl diff --git a/modoboa/core/commands/deploy.py b/modoboa/core/commands/deploy.py index 57b662214..757f923d7 100644 --- a/modoboa/core/commands/deploy.py +++ b/modoboa/core/commands/deploy.py @@ -3,6 +3,7 @@ import getpass import os from os.path import isfile +import random import shutil import subprocess import sys @@ -259,6 +260,18 @@ class DeployCommand(Command): shutil.copyfile(f"{self._templates_dir}/urls.py.tpl", f"{path}/urls.py") os.mkdir(f"{parsed_args.name}/media") + hour = random.randint(0, 6) + tpl = self._render_template( + f"{self._templates_dir}/cron_config.py.tpl", + { + "minute": random.randint(1, 59), + "hour_start": hour, + "hour_end": hour + 12, + }, + ) + with open(f"{path}/cron_config.py", "w") as fp: + fp.write(tpl) + if isfile(f"{path}/settings.pyc"): os.unlink(f"{path}/settings.pyc") self._exec_django_command("migrate", parsed_args.name, "--noinput") diff --git a/modoboa/core/commands/templates/cron_config.py.tpl b/modoboa/core/commands/templates/cron_config.py.tpl new file mode 100644 index 000000000..611d7b349 --- /dev/null +++ b/modoboa/core/commands/templates/cron_config.py.tpl @@ -0,0 +1,30 @@ +from rq.cron import register + +from django.conf import settings + +from modoboa.amavis import jobs as amavis_jobs +from modoboa.calendars import jobs as calendars_jobs +from modoboa.core import jobs as core_jobs +from modoboa.admin import jobs as admin_jobs +from modoboa.maillog import jobs as maillog_jobs + + +register(core_jobs.clean_logs, queue_name="modoboa", cron="0 0 * * *") + +register( + core_jobs.communicate_with_public_api, + queue_name="modoboa", + cron="{{ minute }} {{ hour_start }},{{ hour_end }} * * *", +) + +register(admin_jobs.handle_mailbox_operations, queue_name="dovecot", cron="* * * * *") +register(admin_jobs.handle_dns_checks, queue_name="modoboa", cron="* * * * *") + +register(maillog_jobs.logparser, queue_name="modoboa", cron="*/5 * * * *") +register(maillog_jobs.update_statistics, queue_name="modoboa", cron="0 * * * *") + +register(calendars_jobs.generate_rights, queue_name="modoboa", cron="*/2 * * * *") + +if "modoboa.amavis" in settings.MODOBOA_APPS: + register(amavis_jobs.qcleanup, queue_name="modoboa", cron="0 0 * * *") + register(amavis_jobs.amnotify, queue_name="modoboa", cron="0 12 * * *") diff --git a/test_project/test_project/cron_config.py b/test_project/test_project/cron_config.py index 0e3ee92e2..787ee8199 100644 --- a/test_project/test_project/cron_config.py +++ b/test_project/test_project/cron_config.py @@ -1,5 +1,3 @@ -import random - from rq.cron import register from django.conf import settings @@ -14,12 +12,10 @@ from modoboa.maillog import jobs as maillog_jobs register(core_jobs.clean_logs, queue_name="modoboa", cron="0 0 * * *") # Random start for this one to avoid a DDoS on the API... -minute = random.randint(1, 59) -hour = random.randint(0, 6) register( core_jobs.communicate_with_public_api, queue_name="modoboa", - cron=f"{minute} {hour},{hour + 12} * * *", + cron="12 2,14 * * *", ) register(admin_jobs.handle_mailbox_operations, queue_name="dovecot", cron="* * * * *")