Résolution du déclarant:% i et% I différence?

J'essaie de faire fonctionner le céleri comme un service tel que décrit dans les documents .

La documentation utilise %n%I spécificateurs pour les files journaux:

celery.service:

 ExecStart= [...] --logfile=${CELERYD_LOG_FILE} 

celery.service.d / celery.conf

 Environment="CELERYD_LOG_FILE=/var/log/celery/%n%I.log" 

En faisant cela, je peux voir dans l'état du service que %n est résolu au moment du démarrage et% I rest à ce stade:

 systemctl status celery.service [...] --logfile=/var/log/celery/worker%I.log 

Et j'obtiens ces files journaux:

 /var/log/celery/worker.log /var/log/celery/worker-1.log /var/log/celery/worker-2.log 

Si j'utilise %i , cependant, le tout se résout à l'heure de début

celery.service.d / celery.conf

 Environment="CELERYD_LOG_FILE=/var/log/celery/%n%i.log" 

produit ceci:

 systemctl status celery.service [...] --logfile=/var/log/celery/celery.service.log 

Et je reçois un seul file journal:

 /var/log/celery/celery.service.log 

C'est troublant.

De la documentation de systemd , la seule différence devrait être de s'échapper:

  • "% i" | Nom de l'instance | Pour les unités instanciées: c'est la string entre le caractère "@" et le suffixe du nom de l'unité.
  • "% I" | Nom d'instance non échappé | Identique à "% i", mais avec l'échappement annulé

Y a-t-il quelque chose qui me manque, ici?

De plus, j'ai remarqué que si je définis le path d'access directement dans le file .service , seul le formulaire %n%i est accepté.

 ExecStart= [...] --logfile=/var/log/celery/%n%i.log 

fera, et donnera lieu à

 /var/log/celery/celery.service.log 

tandis que

 ExecStart= [...] --logfile=/var/log/celery/%n%I.log 

triggers une erreur:

 celery.service failed to run 'start' task: Operation not supported Failed to start Celery worker. 

Comment venir?

J'utilise systemd 215-17 sur Debian Jessie.

Modifier 1:

Il semble que %I ne %I pas compris par systemd du tout. Ce que nous voyons en utilisant %I est spécifique au céleri. (Voir les documents de céleri ). Donc %i est géré par systemd tandis que %I est ignoré et transmis de manière transparente par systemd , puis géré par Celery.

Cela explique beaucoup mais laisse quelques questions ouvertes:

  • Pourquoi ne comprend-il pas %I ici?
  • A l'inverse, que se passe-t-il si je voulais passer Celery à %i ?
  • Qu'est-ce qui diffère si je passe l'option directement dans le file .service plutôt que dans le file .conf ?

Je suis passé par systemd changelog et n'a rien trouvé à propos de %I étant plus récent que la version que j'utilise.

Édition 2:

J'ai vu ce message d'erreur lors de l'exécution 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" 

Je ne peux pas le reproduire, cependant. Je ne peux pas dire pourquoi c'est arrivé une fois et pas toujours.