Project

General

Profile

Tâche #14676

Distribution EOLE - Scénario #14473: Traitement express (01-03)

reconfigure ne redémarre pas creoled si le fichier PID a disparu

Added by Emmanuel GARETTE about 7 years ago. Updated about 7 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Start date:
01/18/2016
Due date:
% Done:

100%

Estimated time:
4.00 h
Spent time:
Remaining (hours):
0.0

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

Revision c7d73c56 (diff)
Added by Bruno Boiget about 7 years ago

Correction de l'arrêt de creoled si pas de fichier PID

ref #14676 @1h

Revision c2c8a3d9 (diff)
Added by Bruno Boiget about 7 years ago

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)

Revision 03680c0d (diff)
Added by Daniel Dehennin about 7 years ago

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 about 7 years ago

  • Status changed from Nouveau to En cours

#2 Updated by Scrum Master about 7 years ago

  • Assigned To set to Bruno Boiget

#3 Updated by Bruno Boiget about 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 about 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 about 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 about 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 about 7 years ago

  • Status changed from En cours to Résolu

#8 Updated by Bruno Boiget about 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 about 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 about 7 years ago

  • Assigned To changed from Bruno Boiget to Daniel Dehennin

#11 Updated by Daniel Dehennin about 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 about 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.

Also available in: Atom PDF