Me he estado preguntando y buscando soluciones para esto y no encontré ninguna.
Estoy ejecutando Celery en un contenedor creado con docker-compose. Mi contenedor está configurado así:
celery: build: . container_name: cl01 env_file: ./config/variables.env entrypoint: - /celery-entrypoint.sh volumes: - ./django:/django depends_on: - web - db - redis stop_grace_period: 1mY mi script de punto de entrada se ve así:
#!/bin/sh # Wait for django sleep 10 su -m dockeruser -c "celery -A myapp worker -l INFO" Ahora, si ejecuto docker-compose stop , me gustaría tener un apagado cálido (elegante), dándole a Celery el minuto proporcionado ( stop_grace_period ) para terminar las tareas ya iniciadas. Sin embargo docker-compose stop parece matar a Celery de inmediato. Celery también debería registrar que se le pide que se apague correctamente, pero no veo nada más que una interrupción abrupta de mis registros de tareas.
¿Qué estoy haciendo mal o qué debo cambiar para que Celery se apague correctamente?
editar: la respuesta sugerida a continuación sobre proporcionar el parámetro --timeout para la docker-compose stop no resuelve mi problema.
Debe marcar el proceso de celery con exec , de esta manera el proceso de apio tendrá la misma ID que el comando docker y la ventana acoplable podrá enviarle una señal SIGTERM y cerrar correctamente el proceso de apio.
# should be the last command in script exec celery -A myapp worker -l INFOA través de documentos
Usage: stop [options] [SERVICE...] Options: -t, --timeout TIMEOUT Specify a shutdown timeout in seconds (default: 10).Pruebe con el tiempo de espera establecido en 60 segundos como mínimo.
Intenta usar esto:
docker-compose down