I have this code to run my django celery
first here the settings.py file under app.app.settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'debug_toolbar',
'django_filters',
'django_extensions',
'corsheaders',
'rest_framework',
'auditlog',
'simple_history',
'drf_spectacular',
'django_celery_beat',
'logging',
'core',
'user',
'company',
'erp',
'treasury',
]
CELERY_BROKER_URL = config('CELERY_BROKER_URL')
CELERY_BROKER_BACKEND = "db+sqlite:///celery.sqlite"
CELERY_CACHE_BACKEND = "db+sqlite:///celery.sqlite"
CELERY_RESULT_BACKEND = "db+sqlite:///celery.sqlite"
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
now here the app.app.celery.py file
import os
from celery import Celery
from celery.schedules import crontab
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")
app = Celery("app")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()
app.conf.beat_schedule = {
'generate_recurring_sale_documents_task': {
'task': 'erp.sale_document.tasks.generate_recurring_sale_documents_task',
'schedule': crontab(hour='11', minute='18'),
'args': ('celer_beat_security_key_to_access_to_tasks',)
},
}
and under app.erp.sale_document.tasks.py file I have this code
import logging
from celery import shared_task
from .service import generate_recurring_sale_documents
logger = logging.getLogger(__name__)
@shared_task
def generate_recurring_sale_documents_task(secret_key=None):
# if secret_key != 'celer_beat_security_key_to_access_to_tasks':
# logger.error("Unauthorized access attempt to generate_recurring_sale_documents_task")
# return
generate_recurring_sale_documents()
I run my celery worker and celeyr beat like this
python -m celery -A app.celery worker -l info -E --pool=gevent
python -m celery -A app.celery beat -l debug
here some logs for celery beat
__ - ... __ - _
LocalTime -> 2023-08-07 11:22:08
Configuration ->
. broker -> amqp://bimauser:**@localhost:5672//
. loader -> celery.loaders.app.AppLoader
. scheduler -> django_celery_beat.schedulers.DatabaseScheduler
. logfile -> [stderr]@%DEBUG
. maxinterval -> 5.00 seconds (5s)
[2023-08-07 11:22:08,255: DEBUG/MainProcess] Setting default socket timeout to 30
[2023-08-07 11:22:08,255: INFO/MainProcess] beat: Starting...
[2023-08-07 11:22:08,273: DEBUG/MainProcess] DatabaseScheduler: initial read
[2023-08-07 11:22:08,273: DEBUG/MainProcess] Writing entries...
[2023-08-07 11:22:08,273: DEBUG/MainProcess] DatabaseScheduler: Fetching database schedule
[2023-08-07 11:22:08,350: DEBUG/MainProcess] Current schedule:
<ModelEntry: generate_recurring_sale_documents erp.sale_document.tasks.generate_recurring_sale_documents(*['celer_beat_security_key_to_access_to_tasks'], **{}) <crontab: 43 10
* *
* (m/h/d/dM/MY), UTC>
>
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4
* *
* (m/h/d/dM/MY), UTC>
>
<ModelEntry: generate_recurring_sale_documents_task erp.sale_document.tasks.generate_recurring_sale_documents_task(*['celer_beat_security_key_to_access_to_tasks'], **{}) <crontab: 18 11
* *
* (m/h/d/dM/MY), UTC>
>
[2023-08-07 11:22:08,476: INFO/MainProcess] DatabaseScheduler: Schedule changed.
[2023-08-07 11:22:08,476: DEBUG/MainProcess] Writing entries...
[2023-08-07 11:22:08,476: DEBUG/MainProcess] DatabaseScheduler: Fetching database schedule
[2023-08-07 11:22:08,546: DEBUG/MainProcess] Current schedule:
<ModelEntry: generate_recurring_sale_documents erp.sale_document.tasks.generate_recurring_sale_documents(*['celer_beat_security_key_to_access_to_tasks'], **{}) <crontab: 43 10
* *
* (m/h/d/dM/MY), UTC>
>
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4
* *
* (m/h/d/dM/MY), UTC>
>
<ModelEntry: generate_recurring_sale_documents_task erp.sale_document.tasks.generate_recurring_sale_documents_task(*['celer_beat_security_key_to_access_to_tasks'], **{}) <crontab: 18 11
* *
* (m/h/d/dM/MY), UTC>
>
[2023-08-07 11:22:08,546: DEBUG/MainProcess] beat: Ticking with max interval->5.00 seconds
[2023-08-07 11:22:08,703: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
(process:5424): GLib-GIO-WARNING **: 11:22:08.938: Unexpectedly, UWP app `Microsoft.ScreenSketch_11.2303.17.0_x64__8wekyb3d8bbwe' (AUMId `Microsoft.ScreenSketch_8wekyb3d8bbwe!App') supports 29 extensions but has no verbs
[2023-08-07 11:22:13,715: DEBUG/MainProcess] beat: Synchronizing schedule...
[2023-08-07 11:22:13,715: DEBUG/MainProcess] Writing entries...
[2023-08-07 11:22:13,759: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:18,813: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:23,871: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:28,929: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:33,979: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:39,028: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:44,080: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
also I'm using RabbitMQ in a docker I have some tasks that using celery worker and they work fine (send email .. ). But when I try to use celery beat that does not work always log waking up in 5.00 seconds
what I'm missing or what i'm doing wrong ? Is there any alternative to do schulde operation with celery?