Estou tentando executar o aipo como um serviço conforme descrito nos documentos .
A documentação usa %n%I especificifiers para os arquivos de log:
celery.service:
ExecStart= [...] --logfile=${CELERYD_LOG_FILE}
celery.service.d / celery.conf
Environment="CELERYD_LOG_FILE=/var/log/celery/%n%I.log"
Ao fazer isso, posso ver no status do serviço que %n é resolvido na hora de início e% permaneço neste estágio:
systemctl status celery.service
[...]
--logfile=/var/log/celery/worker%I.log
E eu recebo esses arquivos de log:
/var/log/celery/worker.log
/var/log/celery/worker-1.log
/var/log/celery/worker-2.log
Se eu usar %i , no entanto, a coisa toda será resolvida na hora de início
celery.service.d / celery.conf
Environment="CELERYD_LOG_FILE=/var/log/celery/%n%i.log"
produz isso:
systemctl status celery.service
[...]
--logfile=/var/log/celery/celery.service.log
E eu recebo apenas um arquivo de log:
/var/log/celery/celery.service.log
Isso é preocupante.
De documentação do systemd , a única diferença deve ser sobre o escape:
Há algo que estou perdendo aqui?
Além disso, notei que, se eu definir o caminho do log diretamente no arquivo .service , somente o formulário %n%i será aceito.
ExecStart= [...] --logfile=/var/log/celery/%n%i.log
serve e resulta em
/var/log/celery/celery.service.log
enquanto
ExecStart= [...] --logfile=/var/log/celery/%n%I.log
dispara um erro:
celery.service failed to run 'start' task: Operation not supported
Failed to start Celery worker.
Como assim?
Estou usando o systemd 215-17 no Debian Jessie.
Editar 1:
Parece que %I não é compreendido por systemd . O que vemos quando usamos %I é específico para o aipo. (Consulte documentos do Celery ). Portanto, %i é gerenciado por systemd , enquanto %I é ignorado e passado de forma transparente por systemd e, em seguida, gerenciado pelo Celery.
Isso explica muito, mas deixa algumas perguntas em aberto:
systemd não entende %I aqui? %i ? .service em vez de no arquivo .conf ? Eu passei pelo systemd changelog e não achei nada sobre %I sendo mais recente que a versão que estou usando.
Editar 2:
Eu vi esta mensagem de erro ao executar systemctl status celery.service :
[/etc/systemd/system/celery.service.d/celery.conf:18] Failed to resolve specifiers, ignoring: "CELERYD_LOG_FILE=/var/log/celery/%n%I.log"
Eu não posso reproduzi-lo, no entanto. Não sei dizer por que isso aconteceu uma vez e nem todas as vezes.
Tags systemd