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.
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]
où 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
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
:Le répertoire du journal doit exister ou
supervisord
refusera de démarrer. Créez le répertoire du journal et démarrezsupervisord
au premier plan avec cette configuration :Supprimez le répertoire des journaux pendant que
supervisord
est toujours en cours d'exécution :Essayez de démarrer le processus :