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:
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:
%I
ici? %i
? .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.