Projet

Général

Profil

Tâche #14676

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

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

Ajouté par Emmanuel GARETTE il y a environ 8 ans. Mis à jour il y a environ 8 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Début:
18/01/2016
Echéance:
% réalisé:

100%

Temps estimé:
4.00 h
Temps passé:
Restant à faire (heures):
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

Révisions associées

Révision c7d73c56 (diff)
Ajouté par Bruno Boiget il y a environ 8 ans

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

ref #14676 @1h

Révision c2c8a3d9 (diff)
Ajouté par Bruno Boiget il y a environ 8 ans

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)

Révision 03680c0d (diff)
Ajouté par Daniel Dehennin il y a environ 8 ans

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

Historique

#1 Mis à jour par Scrum Master il y a environ 8 ans

  • Statut changé de Nouveau à En cours

#2 Mis à jour par Scrum Master il y a environ 8 ans

  • Assigné à mis à Bruno Boiget

#3 Mis à jour par Bruno Boiget il y a environ 8 ans

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 Mis à jour par Bruno Boiget il y a environ 8 ans

erreur de ma part, /var/run étant un lien sur /run ça ne doit pas poser problème

#5 Mis à jour par Bruno Boiget il y a environ 8 ans

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 Mis à jour par Bruno Boiget il y a environ 8 ans

  • % réalisé changé de 0 à 90
  • Restant à faire (heures) changé de 4.0 à 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 Mis à jour par Bruno Boiget il y a environ 8 ans

  • Statut changé de En cours à Résolu

#8 Mis à jour par Bruno Boiget il y a environ 8 ans

  • % réalisé changé de 90 à 100
  • Restant à faire (heures) changé de 0.5 à 0.25

paquet 2.5/unstable compilé (cherry-pick depuis branche issue/14676 issue de 2.4.2)

#9 Mis à jour par Bruno Boiget il y a environ 8 ans

  • Statut changé de Résolu à En cours
  • Restant à faire (heures) changé de 0.25 à 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 Mis à jour par Daniel Dehennin il y a environ 8 ans

  • Assigné à changé de Bruno Boiget à Daniel Dehennin

#11 Mis à jour par Daniel Dehennin il y a environ 8 ans

  • Statut changé de En cours à Résolu
  • Restant à faire (heures) changé de 2.0 à 0.1

#12 Mis à jour par Daniel Dehennin il y a environ 8 ans

  • Statut changé de Résolu à Fermé
  • Restant à faire (heures) changé de 0.1 à 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.

Formats disponibles : Atom PDF