Tâche #14676
Distribution EOLE - Scénario #14473: Traitement express (01-03)
reconfigure ne redémarre pas creoled si le fichier PID a disparu
Description
En faisant un Upgrade-Auto de 2.4.1 vers 2.4.2 je me suis retrouvé dans fichier PID pour creoled.
Pourquoi je n'ai plus de fichier ? Je n'en sais strictement rien.
Par contre, reconfigure n'est pas capable de redémarrer creoled ou générer une erreur.
Ce qu'on a dans les conditions normales :
root@amonecole:~# lsof -t -i @127.0.0.1:8000 31369 root@amonecole:~# /etc/init.d/creoled stop * Stopping Creole daemon creoled [ OK ] root@amonecole:~# lsof -t -i @127.0.0.1:8000 root@amonecole:~# /etc/init.d/creoled start * Starting Creole daemon creoled [ OK ] root@amonecole:~# lsof -t -i @127.0.0.1:8000 31503 Si je supprime manuellement le fichier PID, on voit qu'il ne redémarre pas le service : root@amonecole:~# rm /var/run/creoled.pid rm : supprimer fichier «/var/run/creoled.pid» ? y root@amonecole:~# /etc/init.d/creoled stop * Stopping Creole daemon creoled [ OK ] root@amonecole:~# lsof -t -i @127.0.0.1:8000 31503 root@amonecole:~# /etc/init.d/creoled start * Starting Creole daemon creoled [ OK ] root@amonecole:~# lsof -t -i @127.0.0.1:8000 31503
Plus génant, au moment du "start", le status renvoir "is running" quelques seconds et redevient en "is not running".
La gestion des services se basant sur ce status, reconfigure pense avoir légitimement redémarré creoled, alors que ce n'est pas le cas :
root@amonecole:~# /usr/sbin/service creoled stop; /usr/sbin/service creoled status * Stopping Creole daemon creoled [ OK ] * creoled is not running root@amonecole:~# /usr/sbin/service creoled start; /usr/sbin/service creoled status; sleep 5; /usr/sbin/service creoled status * Starting Creole daemon creoled [ OK ] * creoled is running * creoled is not running
Associated revisions
Correction de l'arrêt de creoled si pas de fichier PID
ref #14676 @1h
Correction de l'arrêt de creoled si pas de fichier PID
ref #14676 (cherry-pick depuis branche issue/14676 issue de 2.4.2)
Arrêter creoled si son fichier pid n’existe pas
La commande « start-stop-daemon » ne fera rien si le fichier PID
donné en argument à « --pidfile » n’existe pas.
Il n’est pas possible d’ôter l’option « --pidfile » car la commande
« start-stop-daemon » tuerai le script d’init lui-même.
- init/creoled (do_wait_stop): Chercher le PID des process contenant
« creoled » dans leur nom si le fichier pid n’existe, exclure le
script d’init courant.
Harmoniser l’indentation.
(do_stop): Utiliser la valeur de retour de « do_wait_stop » et
suppression de la gestion des processus fils inutile.
Ref: #14676
History
#1 Updated by Scrum Master over 7 years ago
- Status changed from Nouveau to En cours
#2 Updated by Scrum Master over 7 years ago
- Assigned To set to Bruno Boiget
#3 Updated by Bruno Boiget over 7 years ago
Au niveau du fichier /var/run/creoled.pid, c'est à priori normal qu'il ne soit pas présent vu qu'il est désormais dans /run/
commit 30e49ed7664a9574c6aa7faeacedacab12b3c187 Author: Daniel Dehennin <daniel.dehennin@ac-dijon.fr> Date: Fri Mar 15 17:37:31 2013 +0100 Correction du script d’init de creoled * init/creoled (PIDFILE): Dans /run. (do_wait_stop): On attend la fin du processus. (do_start): Utilisation de « --startas » car il ne détecte pas les processus en cours avec « --exec ». (do_reload): Utilisation du signal « USR1 » pour recharger.
Du coup, est ce que les tests effectués sont réellement valides ?
A voir si il n'y a pas un problème quand on passe de /var/run/creoled.pid à /run/creoled.pid par mise à jour (est ce qu'il arrive à arrêter le process qui était lancé avec l'ancien fichier ?)
#4 Updated by Bruno Boiget over 7 years ago
erreur de ma part, /var/run étant un lien sur /run ça ne doit pas poser problème
#5 Updated by Bruno Boiget over 7 years ago
la commande do_stop ne permet pas l'arrêt dans le cas de creoled si le fichier .pid est effacé :
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME (attente) start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
- La première commande échoue car elle se base sur le fichier .pid
- La deuxième sort directement sans erreur car elle recherche un processus /usr/sbin/creoled alors que le processus réel est /usr/bin/python
en utilisant --name $NAME dans la deuxième commande le processus est bien arrêté.
#6 Updated by Bruno Boiget over 7 years ago
- % Done changed from 0 to 90
- Remaining (hours) changed from 4.0 to 0.5
La correction est prête dans une branche, reste la question habituelle : à partir de quelle version l'appliquer ?
(pb remonté sur une migration 2.4.1 -> 2.4.2)
#7 Updated by Bruno Boiget over 7 years ago
- Status changed from En cours to Résolu
#8 Updated by Bruno Boiget over 7 years ago
- % Done changed from 90 to 100
- Remaining (hours) changed from 0.5 to 0.25
paquet 2.5/unstable compilé (cherry-pick depuis branche issue/14676 issue de 2.4.2)
#9 Updated by Bruno Boiget over 7 years ago
- Status changed from Résolu to En cours
- Remaining (hours) changed from 0.25 to 2.0
La correction effectuée semble poser problème dans le cas du stop si creoled ne tourne pas (et provoque un arrêt dans reconfigure) :
root@eolebase:~# /etc/init.d/creoled stop * Stopping Creole daemon creoled Complété root@eolebase:~# echo $? 143
En lançant le script avec ssh -x, le problème , n'apparaît plus ....
root@eolebase:~# /bin/sh -x /etc/init.d/creoled stop + PATH=/sbin:/usr/sbin:/bin:/usr/bin + DESC='Creole daemon' + NAME=creoled + DAEMON=/usr/sbin/creoled + PIDFILE=/run/creoled.pid ... + do_stop + '[' -f /run/creoled.pid ']' + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --name creoled + RETVAL=1 + '[' 1 = 2 ']' + do_wait_stop + '[' -f /run/creoled.pid ']' + '[' -n '' ']' + rm -f /run/creoled.pid + return 1 + case "$?" in + log_end_msg 0 + '[' -z 0 ']' + '[' 230 ']' + '[' -x /usr/bin/tput ']' + log_use_plymouth + '[' n = y ']' + plymouth --ping + printf '\r' + /usr/bin/tput hpa 230 + '[' 0 -eq 0 ']' + echo '[ OK ]' [ OK ] + return 0
#10 Updated by Daniel Dehennin over 7 years ago
- Assigned To changed from Bruno Boiget to Daniel Dehennin
#11 Updated by Daniel Dehennin over 7 years ago
- Status changed from En cours to Résolu
- Remaining (hours) changed from 2.0 to 0.1
#12 Updated by Daniel Dehennin over 7 years ago
- Status changed from Résolu to Fermé
- Remaining (hours) changed from 0.1 to 0.0
Paquet 2.4.2-13
en eole-2.4.2-proposed-updates
:
root@eolebase:~# service creoled status * creoled is running root@eolebase:~# rm -f /run/creoled.pid root@eolebase:~# service creoled status * creoled is running root@eolebase:~# service creoled stop * Stopping Creole daemon creoled waiting for pid 2221 to die giving up on pid 2221 with kill -0; trying -9 [ OK ]
Testé avec reconfigure aussi.