Running celery as a daemon

Launch celery as demon (daemon), an alternative to the property detach

A little more detailed about systemd / systemctl management.

Create a service for the worker

Create a file:

sudo nano /etc/systemd/system/celery.service

Insert content:

[Unit]
Description= Celery Service

# rabbitmq.target | redis.target
After= network.target rabbitmq.target

[Service]
Type= forking
User= root
Group= www-data

EnvironmentFile= –/etc/systemd/celery.conf
WorkingDirectory=/home/ploshadka/ploshadka.net/

PermissionsStartOnly=true
ExecStartPre= –/bin/mkdir -p $ {CELERYD_STATE_DIR}
ExecStartPre=/bin/chown -R $ {CELERYD_USER}:$ {CELERYD_GROUP} $ {CELERYD_STATE_DIR}
ExecStart=/bin/sh -c ‘$ {CELERY_BIN} multi start
$ {CELERYD_NODES}
-A $ {CELERY_APP}
–pidfile = $ {CELERYD_PID_FILE}
–logfile = $ {CELERYD_LOG_FILE}
–loglevel = $ {CELERYD_LOG_LEVEL}
$ {CELERYD_OPTS} ‘

ExecStop=/bin/sh -c ‘$ {CELERY_BIN} multi stopwait
$ {CELERYD_NODES}
–pidfile = $ {CELERYD_PID_FILE} ‘

ExecReload=/bin/sh -c ‘$ {CELERY_BIN} multi restart
$ {CELERYD_NODES}
-A $ {CELERY_APP}
–pidfile = $ {CELERYD_PID_FILE}
–logfile = $ {CELERYD_LOG_FILE}
–loglevel = $ {CELERYD_LOG_LEVEL}
$ {CELERYD_OPTS} ‘

[Install]
WantedBy= multi-user.target

Run as user rootto avoid problems with access to log folders, etc.

From the content above, you only need to change WorkingDirectory on your own.

Create a service for beat

Create a file for the celerybeat daemon:

sudo nano /etc/systemd/system/celerybeat.service

Content:

[Unit]
Description= CeleryBeat Service

# rabbitmq.target | redis.target
After= network.target rabbitmq.target

[Service]
Type= simple
User= root
Group= www-data
EnvironmentFile= –/etc/systemd/celery.conf
WorkingDirectory=/home/ploshadka/ploshadka.net/
PermissionsStartOnly=true
ExecStartPre= –/bin/mkdir -p $ {CELERYBEAT_STATE_DIR}
ExecStartPre=/bin/chown -R $ {CELERYD_USER}:$ {CELERYD_GROUP} $ {CELERYBEAT_STATE_DIR}
# ExecStartPre = / bin / rm $ {CELERYBEAT_SCHEDULE}
ExecStart=/bin/bash -c ‘$ {CELERY_BIN} beat
-A $ {CELERY_APP}
–workdir = $ {CELERYBEAT_WORKDIR}
–pidfile = $ {CELERYBEAT_PID_FILE}
–logfile = $ {CELERYBEAT_LOG_FILE}
–loglevel = $ {CELERYBEAT_LOG_LEVEL}
–schedule = $ {CELERYBEAT_SCHEDULE} ‘

ExecStop=/bin/systemctl kill celerybeat.service

[Install]
WantedBy= multi-user.target

Create a config for the services above

The configuration file for both services will be the same. In it we will describe the settings for both the worker and celerybeat.

Create a file:

sudo nano /etc/systemd/celery.conf

We insert there:

# Access
CELERYD_USER=“root”
CELERYD_GROUP=“www-data”

# Path to directory and task
CELERY_BIN=“/home/ploshadka/ploshadka.net/venv/bin/celery”
CELERY_APP=“tasks.monitoring.celery”

# Worker settings
CELERYD_NODES=“worker1”
CELERYD_OPTS=“–purge”

CELERYD_MULTI=“multi”
CELERYD_STATE_DIR=“/ var / run / celery”
CELERYD_PID_FILE=“/var/run/celery/%n.pid”
CELERYD_LOG_FILE=“/var/log/celery/%n.log”

# Beat settings
CELERYBEAT_STATE_DIR=“/ var / run / celerybeat”
CELERYBEAT_PID_FILE=“/var/run/celerybeat/beat.pid”
CELERYBEAT_LOG_FILE=“/var/log/celery/beat.log”
CELERYBEAT_SCHEDULE=“/ var / run / celerybeat / schedule”
CELERYBEAT_WORKDIR=“/home/ploshadka/ploshadka.net/”

# INFO / DEBUG / etc
CELERYD_LOG_LEVEL=“INFO”
CELERYBEAT_LOG_LEVEL=“INFO”

Now we start the service:

sudo systemctl enable celery.service
sudo systemctl enable celerybeat.service

Or run it and add it to startup:

sudo systemctl enable –now celery.service
sudo systemctl enable –now celerybeat.service

Restart after editing files:

sudo systemctl daemon-reload
sudo systemctl restart celery.service
sudo systemctl restart celerybeat.service

Check status:

sudo systemctl status celery.service
sudo systemctl status celerybeat.service

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *