diff --git a/zerver/management/commands/send_zulip_update_announcements.py b/zerver/management/commands/send_zulip_update_announcements.py index 23829b88ab..a885f46f58 100644 --- a/zerver/management/commands/send_zulip_update_announcements.py +++ b/zerver/management/commands/send_zulip_update_announcements.py @@ -1,8 +1,11 @@ from argparse import ArgumentParser from typing import Any +from django.conf import settings from typing_extensions import override +from scripts.lib.zulip_tools import ENDC, WARNING +from zerver.lib.context_managers import lockfile_nonblocking from zerver.lib.management import ZulipBaseCommand from zerver.lib.zulip_update_announcements import send_zulip_update_announcements @@ -20,4 +23,13 @@ class Command(ZulipBaseCommand): @override def handle(self, *args: Any, **options: Any) -> None: - send_zulip_update_announcements(skip_delay=options["skip_delay"]) + with lockfile_nonblocking( + settings.ZULIP_UPDATE_ANNOUNCEMENTS_LOCK_FILE, + ) as lock_acquired: + if lock_acquired: + send_zulip_update_announcements(skip_delay=options["skip_delay"]) + else: + print( + f"{WARNING}Update announcements lock {settings.ZULIP_UPDATE_ANNOUNCEMENTS_LOCK_FILE} is unavailable;" + f" exiting.{ENDC}" + ) diff --git a/zproject/computed_settings.py b/zproject/computed_settings.py index 4aba17d188..c632f7f54d 100644 --- a/zproject/computed_settings.py +++ b/zproject/computed_settings.py @@ -699,6 +699,9 @@ AUTH_LOG_PATH = zulip_path("/var/log/zulip/auth.log") SCIM_LOG_PATH = zulip_path("/var/log/zulip/scim.log") ZULIP_WORKER_TEST_FILE = zulip_path("/var/log/zulip/zulip-worker-test-file") +ZULIP_UPDATE_ANNOUNCEMENTS_LOCK_FILE = zulip_path( + "/home/zulip/deployments/zulip_update_announcements.lock" +) if IS_WORKER: