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:
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:
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:
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