Ejecutar el apio como daemon no crea archivo PID (sin número de permiso)

Estoy tratando de ejecutar el apio (trabajador) como un daemon / servicio en el servidor Ubuntu. He seguido su documentación (https://docs.celeryproject.org/en/stable/userguide/daemonizing.html)

Sin embargo, cuando empiezo el daemon dice:

celery multi v5.0.4 (singularity)
> Starting nodes...
        > worker1@ubuntuserver: OK

Pero cuando comprobé el estado dice:

celery init v10.1.
Using config script: /etc/default/celeryd
celeryd down: no pidfiles found

He visto alguna información en internet sobre permisos. Pero no estoy seguro de cuál, porque en lo que puedo ver los permisos son correctos. Crea un archivo de registro en /var/log/celery, pero está vacío.

Cuando ejecuté el /etc/init.d/celeryd servicio por primera vez, creó carpetas y permisos propios:

- Creating default directory: '/var/log/celery'
- Changing permissions of '/var/log/celery' to 02755
- Changing owner of '/var/log/celery' to 'root'
- Changing group of '/var/log/celery' to 'root'
- Creating default directory: '/var/run/celery'
- Changing permissions of '/var/run/celery' to 02755
- Changing owner of '/var/run/celery' to 'root'
- Changing group of '/var/run/celery' to 'root'

He tratado de dar permisos completos para todos a las carpetas, pero eso no funcionó (sé que no es seguro, sólo propósito de pruebas).

Estoy usando este archivo init.d/celeryd (nada cambió aquí): https://github.com/celery/celery/blob/master/extra/generic-init.d/celeryd

Así es como mi archivo /etc/default/celeryd parece:

# Names of nodes to start
#   most people will only start one node:
CELERYD_NODES="worker1"
#   but you can also start multiple and configure settings
#   for each in CELERYD_OPTS
#CELERYD_NODES="worker1 worker2 worker3"
#   alternatively, you can specify the number of nodes to start:
#CELERYD_NODES=10

# Absolute or relative path to the 'celery' command:
CELERY_BIN="/usr/local/bin/celery"
#CELERY_BIN="/virtualenvs/def/bin/celery"

# App instance to use
# comment out this line if you don't use an app
CELERY_APP="VulnScanner"
# or fully qualified:
#CELERY_APP="proj.tasks:app"

# Where to chdir at start.
CELERYD_CHDIR="/home/marvin/VulnScanner/"

# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"
# Configure node-specific settings by appending node name to arguments:
#CELERYD_OPTS="--time-limit=300 -c 8 -c:worker2 4 -c:worker3 2 -Ofair:worker1"

# Set logging level to DEBUG
CELERYD_LOG_LEVEL="DEBUG"

# %n will be replaced with the first part of the nodename.
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"

# Workers should run as an unprivileged user.
#   You need to create this user manually (or you can choose
#   a user/group combination that already exists (e.g., nobody).
CELERYD_USER="root"
CELERYD_GROUP="root"

# If enabled pid and log directories will be created if missing,
# and owned by the userid/group configured.
CELERY_CREATE_DIRS=1

Resumen de mi objetivo: Ahora tengo 2 comandos para el apio, que necesito correr manualmente. Pero todo el objetivo es automatizar todo, por lo que esos 2 comandos necesitan correr siempre cuando el sistema operativo está encendido. Comandos (ambos en la carpeta del proyecto Django: VulnScanner):

celery -A VulnScanner worker -l INFO
celery -A VulnScanner beat -l DEBUG --scheduler django_celery_beat.schedulers:DatabaseScheduler

De hecho, quiero hacer un servicio de ellos.

Espero que alguien pueda ayudar. Estoy perdido.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por Brian


2 Respuestas:

  • El problema podría estar relacionado con los permisos de la carpeta donde debería crearse el archivo PID del apio. Parece que el archivo PID no se está creando debido a problemas de permisos en la carpeta /var/run/celery.

    Una solución posible es asegurarte de que el usuario y grupo especificados en el archivo de configuración /etc/default/celeryd tengan permisos de escritura en la carpeta /var/run/celery.

    Puedes intentar lo siguiente:

    • Verificar el usuario y grupo que están configurados en el archivo `/etc/default/celeryd` y asegurarte de que tengan permisos de escritura en la carpeta `/var/run/celery`.

    • Cambiar el propietario y grupo de la carpeta /var/run/celery para que coincida con los valores especificados en el archivo de configuración:
    
       sudo chown -R root:root /var/run/celery
       

    • Asegurarte de que la carpeta /var/run/celery tenga permisos de escritura para el usuario y grupo:
    
       sudo chmod -R 775 /var/run/celery
       

    Después de realizar estos cambios, intenta reiniciar el servicio de apio para ver si se crea el archivo PID correctamente. Si el problema persiste, revisa los logs de apio y del sistema para obtener más información sobre por qué no se está creando el archivo PID.

    Respondida el Dec 18, 2020 a las 10:07 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Solución:

    El problema se debe a que el usuario que ejecuta el servicio Celery (especificado en la variable CELERYD_USER) no tiene permiso para crear los archivos PID en el directorio /var/run/celery.

    Para resolver esto, debes asegurarte de que el usuario root (especificado en CELERYD_USER) tenga permiso de escritura en el directorio /var/run/celery.

    Pasos para resolver el problema:

    • Cambia el propietario y los permisos del directorio `/var/run/celery` al usuario `root`:
    
    sudo chown root:root /var/run/celery
    sudo chmod 755 /var/run/celery
    
    • Reinicia el servicio Celery:
    
    sudo service celeryd restart
    

    Después de seguir estos pasos, el servicio Celery debería poder crear archivos PID correctamente y ejecutarse como un daemon.

    Nota:

    Es importante utilizar un usuario no privilegiado para ejecutar el servicio Celery, como se indica en la variable CELERYD_USER. Esto ayuda a mejorar la seguridad del sistema. Si aún tienes problemas, verifica los permisos de otros directorios relevantes, como /var/log/celery.

    Respondida el Dec 18, 2020 a las 10:14 - por Gemini

    Votos positivos: 0 | Votos negativos: 0