mardi 17 février 2009
Un petit post geek ne fait jamais de mal
Par Kebin, mardi 17 février 2009 à 14:04 :: Info
Gentoo ne fait pas exception puisque
Voici le genre de commandes que l'on peut être amené à taper parfois lorsqu'on administre un serveur et que l'on veut redémarrer le SGBD.
* Stopping PostgreSQL... [ ok ]
* Starting PostgreSQL... [ ok ]
Malheureusement il arrive que ça merde
* Stopping PostgreSQL... [ !! ]
* ERROR: postgresql failed to stop
# /etc/init.d/postgresql restart
* Stopping PostgreSQL...
* start-stop-daemon: fopen`/var/lib/postgresql/data/postmaster.pid': No such file or directory[ !! ]
# ps -A |grep postgres
# /etc/init.d/postgresql start
* WARNING: postgresql has already been started
Et c'est le drame.
Le bougre refuse tout simplement de redémarrer.
Échec.
Regardons un peu ce qu'il se passe.
- La première commande lui fait se péter la gueule comme une loutre bourrée.
- A la seconde il nous dit qu'il n'arrive pas à arrêter postgresql puisqu'il ne trouve pas le PID du processus (il ne peut pas lui envoyer de message pour lui demander gentiment de se fermer)
- La quatrième commande montre que postgres n'est pas lancé.
- Ce qui, chose embêtante, est en contradiction évidente avec la cinquième où il nous dit qu'il est déjà démarré.
Comment forcer le redémarrage du service ?
On pourrait rebooter le PC et tout rentrerait certainement dans l'ordre, mais ça ne serait pas amusant.
strace est un outil qui permet de suivre les appels systèmes d'un programme.
...blablabla
# ls -l /lib64/rc/init.d/started/postgresql
lrwxrwxrwx 1 root root 22 févr. 1713:36 /lib64/rc/init.d/started/postgresql ->/etc/init.d/postgresql
Haha ! C'est donc dans/lib64/rc/init.d/ qu'il cache les états des services !
Voyons voir si il est si facile que ça à duper
# /etc/init.d/tomcat-6 restart
* Stopping Tomcat... [ ok ]
* Starting Tomcat... [ ok ]
Kévin 1,Gentoo 0
Yahoo !
Ce n'était pourtant pas bien compliqué








