Запуск Celery и Celery Beat

Для работы Celery необходимо поднять worker и beat. Они поднимаются вручную в терминале, все работает, регламенты выполняются. Как сделать так, чтобы они запускались в фоне, типа как служба? ОС Centos 10.

Можно это сделать, используя образ Docker?


Ответы (1 шт):

Автор решения: Alex Wolf

Создайте файл /etc/systemd/system/celery-worker.service:

[Unit]
Description=Celery Worker Service
After=network.target
Wants=network.target

[Service]
Type=simple
User=your_username
Group=your_username
WorkingDirectory=/path/to/your/django/project
Environment="PATH=/path/to/your/venv/bin"
Environment="DJANGO_SETTINGS_MODULE=your_project.settings"
Environment="CELERY_BROKER_URL=redis://localhost:6379/0"
ExecStart=/path/to/your/venv/bin/celery -A your_project worker --loglevel=info
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Создайте файл /etc/systemd/system/celery-beat.service:

[Unit]
Description=Celery Beat Service
After=network.target celery-worker.service
Wants=celery-worker.service

[Service]
Type=simple
User=your_username
Group=your_username
WorkingDirectory=/path/to/your/django/project
Environment="PATH=/path/to/your/venv/bin"
Environment="DJANGO_SETTINGS_MODULE=your_project.settings"
Environment="CELERY_BROKER_URL=redis://localhost:6379/0"
ExecStart=/path/to/your/venv/bin/celery -A your_project beat --loglevel=info
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Универсальный скрипт для создания служб Создайте скрипт create-celery-services.sh:

#!/bin/bash

# Получение информации о проекте
read -p "Введите путь к проекту Django: " PROJECT_PATH
read -p "Введите имя пользователя: " USERNAME
read -p "Введите имя проекта Django: " PROJECT_NAME
read -p "Введите URL брокера (например, redis://localhost:6379/0): " BROKER_URL

# Создание службы для Worker
cat > /etc/systemd/system/celery-worker.service << EOF
[Unit]
Description=Celery Worker Service
After=network.target
Wants=network.target

[Service]
Type=simple
User=$USERNAME
Group=$USERNAME
WorkingDirectory=$PROJECT_PATH
Environment="PATH=$PROJECT_PATH/.venv/bin"
Environment="DJANGO_SETTINGS_MODULE=$PROJECT_NAME.settings"
Environment="CELERY_BROKER_URL=$BROKER_URL"
ExecStart=$PROJECT_PATH/.venv/bin/celery -A $PROJECT_NAME worker --loglevel=info
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

# Создание службы для Beat
cat > /etc/systemd/system/celery-beat.service << EOF
[Unit]
Description=Celery Beat Service
After=network.target celery-worker.service
Wants=celery-worker.service

[Service]
Type=simple
User=$USERNAME
Group=$USERNAME
WorkingDirectory=$PROJECT_PATH
Environment="PATH=$PROJECT_PATH/.venv/bin"
Environment="DJANGO_SETTINGS_MODULE=$PROJECT_NAME.settings"
Environment="CELERY_BROKER_URL=$BROKER_URL"
ExecStart=$PROJECT_PATH/.venv/bin/celery -A $PROJECT_NAME beat --loglevel=info
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

echo "Службы созданы успешно!"
echo "Для активации выполните:"
echo "sudo systemctl daemon-reload"
echo "sudo systemctl enable celery-worker celery-beat"
echo "sudo systemctl start celery-worker celery-beat"
→ Ссылка