Supervisor: Crash si le répertoire des journaux n'existe pas

Créé le 3 juil. 2015  ·  4Commentaires  ·  Source: Supervisor/supervisor

Signalé dans les commentaires du numéro 120 :

Je ne sais pas si cela a été résolu d'une manière ou d'une autre dans la branche principale, mais dans la version 3.1.1, quelqu'un a accidentellement supprimé un répertoire de journaux sur notre serveur et le superviseur a simplement cessé de fonctionner, emportant avec lui tous les autres programmes, pas seulement celui avec le répertoire du journal est manquant.

logging

Commentaire le plus utile

Corrigé dans fd22ca89ff353fbe92845e9d2517645e6cf149ac. Ce correctif sera inclus dans Supervisor 3.2.

Voici comment le dupliquer et vérifier qu'il est corrigé. Minime supervisord.conf :

[supervisord]
logfile = /tmp/supervisord.log

[inet_http_server]
port = 127.0.0.1:9001

[supervisorctl]
serverurl = http://127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false

Le répertoire du journal doit exister ou supervisord refusera de démarrer. Créez le répertoire du journal et démarrez supervisord au premier plan avec cette configuration :

$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508

Supprimez le répertoire des journaux pendant que supervisord est toujours en cours d'exécution :

$ rmdir /thelogdir

Essayez de démarrer le processus :

$ supervisorctl -c /path/to/supervisord.conf 
cat                              STOPPED   Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat                              FATAL     unknown error making dispatchers for 'cat': ENOENT

Tous les 4 commentaires

J'ai vu et j'ai été ennuyé par ce comportement aussi. Je pense que le comportement correct est de créer logdir si possible, et au minimum, il ne devrait pas être autorisé à planter d'autres tâches

J'ai vu et j'ai été ennuyé par ce comportement aussi.

Quand survient-il ? Le commentaire original n'est pas précis. Un plantage se produit-il lorsque stdout_logfile dans une section [program:x] spécifie un répertoire de journal qui n'existe pas ? Quelle version de Supervisor utilisez-vous ?

Je pense que le comportement correct est de créer logdir si possible

Je n'utilise aucun autre programme qui a un comportement comme celui-ci. supervisord n'a pas assez d'informations pour créer automatiquement un répertoire de journaux, car il ne sait pas quel utilisateur doit posséder le répertoire ou quelles doivent être les autorisations. Je pense que la seule chose qu'il peut faire sans développer un tas d'options pour tout cela est d'afficher un message d'erreur clair lorsqu'un répertoire de journal n'existe pas.

au minimum, il ne devrait pas être autorisé à planter d'autres tâches

Je suis d'accord que l'ajout d'une section [program:x]stdout_logfile ou stderr_logfile spécifie un répertoire qui n'existe pas ne devrait pas planter supervisord .

Un plantage se produit-il lorsque stdout_logfile dans une section [program:x] spécifie un répertoire de journaux qui n'existe pas ? Quelle version de Supervisor utilisez-vous ?

Oui. Un problème sur 3.1.3 pour moi.

Corrigé dans fd22ca89ff353fbe92845e9d2517645e6cf149ac. Ce correctif sera inclus dans Supervisor 3.2.

Voici comment le dupliquer et vérifier qu'il est corrigé. Minime supervisord.conf :

[supervisord]
logfile = /tmp/supervisord.log

[inet_http_server]
port = 127.0.0.1:9001

[supervisorctl]
serverurl = http://127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false

Le répertoire du journal doit exister ou supervisord refusera de démarrer. Créez le répertoire du journal et démarrez supervisord au premier plan avec cette configuration :

$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508

Supprimez le répertoire des journaux pendant que supervisord est toujours en cours d'exécution :

$ rmdir /thelogdir

Essayez de démarrer le processus :

$ supervisorctl -c /path/to/supervisord.conf 
cat                              STOPPED   Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat                              FATAL     unknown error making dispatchers for 'cat': ENOENT
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

kootenpv picture kootenpv  ·  3Commentaires

vBlackOut picture vBlackOut  ·  5Commentaires

meshy picture meshy  ·  4Commentaires

cachvico picture cachvico  ·  3Commentaires

YxAc picture YxAc  ·  4Commentaires