Resolução do especificador:% i e% i diferença?

5

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:

  • "% i" | Nome da instância | Para unidades instanciadas: esta é a cadeia entre o caractere "@" e o sufixo do nome da unidade.
  • "% I" | Nome da instância sem escape | O mesmo que "% i", mas com escape desfeito

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:

  • Por que systemd não entende %I aqui?
  • Por outro lado, e se eu quisesse passar a Celery %i ?
  • Por que é diferente se eu passar a opção diretamente no arquivo .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.

    
por Jérôme 09.10.2017 / 12:29

0 respostas

Tags