diff --git a/apps/common/job/clean_chat_job.py b/apps/common/job/clean_chat_job.py index 44ae4bb86..71af48787 100644 --- a/apps/common/job/clean_chat_job.py +++ b/apps/common/job/clean_chat_job.py @@ -2,20 +2,16 @@ import datetime -from apscheduler.schedulers.background import BackgroundScheduler from django.db import transaction from django.db.models import Q, Max from django.utils import timezone -from django_apscheduler.jobstores import DjangoJobStore from application.models import Application, Chat, ChatRecord +from common.job.scheduler import scheduler from common.utils.lock import try_lock, un_lock, lock from common.utils.logger import maxkb_logger from knowledge.models import File -scheduler = BackgroundScheduler() -scheduler.add_jobstore(DjangoJobStore(), "default") - def clean_chat_log_job(): clean_chat_log_job_lock() @@ -76,7 +72,8 @@ def clean_chat_log_job_lock(): def run(): if try_lock('clean_chat_log_job', 30 * 30): try: - scheduler.start() + maxkb_logger.info('get lock clean_chat_log_job') + existing_job = scheduler.get_job(job_id='clean_chat_log') if existing_job is not None: existing_job.remove() diff --git a/apps/common/job/clean_debug_file_job.py b/apps/common/job/clean_debug_file_job.py index 4933579d5..e4b1a4714 100644 --- a/apps/common/job/clean_debug_file_job.py +++ b/apps/common/job/clean_debug_file_job.py @@ -1,19 +1,14 @@ # coding=utf-8 -import time from datetime import timedelta -from apscheduler.schedulers.background import BackgroundScheduler from django.db.models import Q from django.utils import timezone -from django_apscheduler.jobstores import DjangoJobStore +from common.job.scheduler import scheduler from common.utils.lock import un_lock, try_lock, lock from common.utils.logger import maxkb_logger from knowledge.models import File, FileSourceType -scheduler = BackgroundScheduler() -scheduler.add_jobstore(DjangoJobStore(), "default") - def clean_debug_file(): clean_debug_file_lock() @@ -22,7 +17,7 @@ def clean_debug_file(): @lock(lock_key='clean_debug_file_execute', timeout=30) def clean_debug_file_lock(): from django.utils.translation import gettext_lazy as _ - maxkb_logger.debug(_('start clean debug file')) + maxkb_logger.info(_('start clean debug file')) minutes_30_ago = timezone.now() - timedelta(minutes=30) two_hours_ago = timezone.now() - timedelta(hours=2) one_days_ago = timezone.now() - timedelta(hours=24) @@ -31,17 +26,18 @@ def clean_debug_file_lock(): Q(create_time__lt=one_days_ago, source_type=FileSourceType.TEMPORARY_1_DAY.value) | Q(create_time__lt=two_hours_ago, source_type=FileSourceType.TEMPORARY_120_MINUTE.value) | Q(create_time__lt=minutes_30_ago, source_type=FileSourceType.TEMPORARY_30_MINUTE.value)).delete() - maxkb_logger.debug(_('end clean debug file')) - time.sleep(2) + maxkb_logger.info(_('end clean debug file')) + # time.sleep(2) def run(): if try_lock('clean_debug_file', 30 * 30): try: - scheduler.start() + maxkb_logger.info('get lock clean_debug_file') + clean_debug_file_job = scheduler.get_job(job_id='clean_debug_file') if clean_debug_file_job is not None: clean_debug_file_job.remove() - scheduler.add_job(clean_debug_file, 'cron', hour='*', minute='*/30', second='0', id='clean_debug_file') + scheduler.add_job(clean_debug_file, 'cron', hour='*', minute='*/1', second='0', id='clean_debug_file') finally: un_lock('clean_debug_file') diff --git a/apps/common/job/client_access_num_job.py b/apps/common/job/client_access_num_job.py index 48262c824..f23ff324f 100644 --- a/apps/common/job/client_access_num_job.py +++ b/apps/common/job/client_access_num_job.py @@ -7,17 +7,13 @@ @desc: """ -from apscheduler.schedulers.background import BackgroundScheduler from django.db.models import QuerySet -from django_apscheduler.jobstores import DjangoJobStore from application.models import ApplicationChatUserStats +from common.job.scheduler import scheduler from common.utils.lock import try_lock, un_lock, lock from common.utils.logger import maxkb_logger -scheduler = BackgroundScheduler() -scheduler.add_jobstore(DjangoJobStore(), "default") - def client_access_num_reset_job(): client_access_num_reset_job_lock() @@ -34,7 +30,8 @@ def client_access_num_reset_job_lock(): def run(): if try_lock('access_num_reset', 30 * 30): try: - scheduler.start() + maxkb_logger.info('get lock access_num_reset') + access_num_reset = scheduler.get_job(job_id='access_num_reset') if access_num_reset is not None: access_num_reset.remove() diff --git a/apps/common/job/scheduler.py b/apps/common/job/scheduler.py new file mode 100644 index 000000000..33ccd2782 --- /dev/null +++ b/apps/common/job/scheduler.py @@ -0,0 +1,12 @@ +from apscheduler.schedulers.background import BackgroundScheduler +from django_apscheduler.jobstores import DjangoJobStore + +scheduler = BackgroundScheduler() +scheduler.add_jobstore(DjangoJobStore(), "default") + +try: + scheduler.start() +except Exception as e: + from common.utils.logger import maxkb_logger + + maxkb_logger.error(f"Failed to start scheduler: {e}")