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