Aide pour un script

Voici un script que je fais tourner chaque 5 mns par le runner sur mon poste pour réinitialiser les utilisateurs qui sont parfois déconnectés de ma BD. Mon problème est que lorsque deux occurences se chevauchent, mon script se plante. Comment dire à la deuxième occurence d'attendre la fin de la première avant de se lancer.

echo off
sqlplus der/vil@vildb @c:\maj\maj.sql

Merci

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Le plus simple, à mon avis, serait de créer un champ dans une table qui indique si un script est en cours d'exécution ou non.

    Au début de ton script, tu vérifies ce champ ; s'il indique qu'une occurrence est en cours, il s'arrête là (ou il attend, suivant tes besoins). Si aucune occurrence n'est en cours, il modifie cette valeur pour dire qu'il y a un script qui tourne. À la fin de son travail, il remet la valeur pour dire qu'il a fini.

    Xavier

    PS : un problème quand même, si le script se plante, le paramètre restera marqué comme "script en cours". On peut contourner le problème en indiquant une date de début d'exécution, et en considérant que si le paramètre indique qu'un script tourne depuis plus d'une heure, on considère qu'aucun script ne tourne.
    1. J'ai pensé effectivement à mettre un controle, malheureusement je en sais pas le faire.
    2. Comment faire donc une boucle pour que le script tourne sans se mordre la queue?
      Merci
    3. Tu as bien essayé de le mettre dans ton script sql ? C'est écrit en quel langage, déjà ? Pour quel SGBD ?)
    4. sqlplus der/vil@vildb @c:\maj\maj.sql
      C'est un script sql qui me permet de me connecter à ma base de données et d'exécuter ensuite une commande oracle qui se trouve dans maj.sql. La commande oracle permet de réinitialiser les utilisateurs qui sont connectés à ma BD.
    5. Et dans ce script SQL, tu n'as pas réussi à faire ce que je t'ai proposé ? Tu as essayé comment exactement ?
      Sinon, la méthode de Dubcek devrait marcher aussi (attention à utiliser un nom de fichier peut-être un peu plus explicite, parce que si une autre appli met un fichier lock dans TEMP...)
  2. Quelqu'un peut-il m'indiquer comment intoduire une boucle dans le scprit ci-dessous afin quil ne se morde pas la queue c'est-à-dire que la seconde ocurence ne s'exécute pas tant que la première n'est pas finie.

    echo off
    sqlplus der/vil@vildb @c:\maj\maj.sql

    Merci
    1. Contributeur
      hello
      echo off
      
      if exist %TMP%\lock (
      	echo message
      	exit
      )
      
      echo %0 en exécution  > %TMP%\lock
      sqlplus der/vil@vildb @c:\maj\maj.sql
      del %TMP%\lock
      
      1. Merci, je vais le tester et vous tenir informé.
      2. bonsoir
        Juste dire merci à tout ceux qui m'ont donné un coup de main dans la résolution de mon problème. Des ennuis de santé m'ont empêché de le faire plus tot.