IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

pg_ctl -wait start n'attend pas


Sujet :

PostgreSQL

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Par défaut pg_ctl -wait start n'attend pas
    Bonjour,

    A chaque démarrage de mon serveur, un script exécute les commandes suivantes:
    1 - sauvegarde a froid de la base de données (tar des répertoires)
    2 - Démarrage du serveur (pg_ctl -w start-D xxx)
    1 Si la commande failed (retour != 0) -> Fait autre chose
    2 Sinon le programme continue

    Ce code fonctionne très bien dans la majorité des cas.
    Cependant il se pose un problème dans le cas ou il y a eu arrêt brutal de la machine (Genre coupure courant).
    Dans ce cas la commande pg_ctl -w start me renvoi immédiatement un code retour != 0 mais continue a essayer de démarrer le serveur jusqu'a y parvenir.

    Ce qui me surprend, c'est que la commande wait est censé attendre la fin du démarrage du serveur avant de rendre la main.

    Voici la log de mon programme qui commence juste après la tentative de démarrage du serveur (pg_ctl -w start)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Postgres>pg_ctl: another server might be running; trying to start server anyway
    Postgres>pg_ctl: could not start server
    Postgres>Examine the log output
    APPLI>Command failed: pg_ctl -w start -D /data/mabase <-- LA COMMANDE REND LA MAIN ICI
    Postgres>LOG:  database system was interrupted at 2009-11-20 19:04:28 UTC
    Postgres>LOG:  checkpoint record is at 0/21AF40C
    Postgres>LOG:  redo record is at 0/21AF40C; undo record is at 0/0; shutdown FALSE
    Postgres>LOG:  next transaction ID: 0/14029; next OID: 17192
    Postgres>LOG:  next MultiXactId: 1; next MultiXactOffset: 0
    Postgres>LOG:  database system was not properly shut down; automatic recovery in progress
    Postgres>LOG:  redo starts at 0/21AF454
    Postgres>LOG:  record with zero length at 0/21B2070
    Postgres>LOG:  redo done at 0/21B2048
    Postgres>LOG:  database system is ready
    Voici ma config:
    Postgres 8.2
    Mandriva 2007

    Si quelqu'un a une idée, je suis bien évidemment très intéressé.

    Arnaud

  2. #2
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    L'arrêt brutal du serveur nécessite un recovery au démarrage suivant, c'est sans doute pour cela que le code retour est différent de 0.
    Néanmoins c'est vrai que d'après la doc la commande n'est pas censée te rendre la main tout de suite
    Pourquoi ne ferais-tu pas comme préconisé dans la doc officielle en testant au lieu du code retour de pg_ctl le code retour de "psql -l" ?
    -w

    Attendre la fin du démarrage ou de l'arrêt. S'interrompt au bout de 60 secondes. C'est la valeur par défaut pour les arrêts. Un arrêt réussi est indiqué par la suppression du fichier PID. Pour le démarrage, un psql -l se terminant avec succès indique que tout va bien. pg_ctl tente d'utiliser le bon port pour psql. Si la variable d'environnement PGPORT existe, elle est utilisée. Sinon, un port configuré dans le fichier postgresql.conf est cherché. Si aucun des deux n'est utilisé, le port par défaut avec lequel PostgreSQL™ a été compilé (5432 par défaut) est utilisé. Lorsqu'il attend, pg_ctl renvoie un code de sortie précis fondé sur le succès du démarrage ou de l'arrêt.
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Par défaut
    Tout d'abord merci d'avoir répondu.

    Le fait d'utiliser psql -l n'arrange je pense pas le problème puisque cette commande sera exécuté avant le démarrage réel du serveur. Je pense donc qu'elle retournera un code erreur.

    Pour l'instant je prévois plutôt de faire une solution bien môche:
    En cas d'échec de pg_ctl -w start, attendre 1 minute (le temps max du wait), puis tester le démarage du serveur avec psql -l.

    Arnaud

  4. #4
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Ben écoute là comme ça je ne vois pas comment faire autrement qu'avec ta solution moche
    Par contre 1 minute c'est peu je pense, il se pourrait lors d'un crash brutal de la base qu'il faille plus de 1 minute pour faire le recovery, moi je mettrais 5 minutes par sécurité, à moins que dans la minute tu souhaites tout de suite avoir la remontée d'alerte sur la réussite ou non du démarrage de ta base
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. "start /wait" qui n'attend pas
    Par onlajoy dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 26/11/2009, 22h13
  2. Mon appli Web Start n'arrive pas à charger une image
    Par nouknouk dans le forum Applets
    Réponses: 4
    Dernier message: 25/04/2007, 22h55
  3. une fonction n'attend pas la fin de la précedente
    Par Romalafrite dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/01/2007, 15h05
  4. [AJAX] settimeout qui attend pas assez
    Par zooffy dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/01/2007, 10h52
  5. java web start qui veut pas se lancer
    Par calvin dans le forum JWS
    Réponses: 4
    Dernier message: 30/06/2004, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo