none
DOS - Script en attente sans raison

    Question

  • Bonjour,

    J'ai un problème sur l'execution d'un script sur un Windows Server 2012.
    Ce script pour aucune raison apparente ce met en pause, sur l'une des commandes et reste dans l'attente.
    Aucun affichage à l'écran indiquant qu'il est en pause. Et si l'on appuie sur une touche du clavier, il repart.

    L'anomalie est complètement aléatoire. C'est la deuxième fois que le problème se présente, et il c'est passé plus d'une semaine entre les deux pannes (le script est journalier).

    Le script réalise les étapes suivantes :
    Traitement (qui appel d'autres script)
    --> call C:\batch\start.bat

     Save SQL après traitement :
    --> sqlcmd -iE:\BackupDB.sql -vmoment="apres" datedujour="%dateTFJ%"
    --> sqlcmd -iE:\BackupLOG.sql -vmoment="apres" datedujour="%dateTFJ%"

    La première fois il est resté en pause sur le traitement.
    La seconde sur la save SQL après traitement.

    J'ai l'impression que le script pense que les processus appelé tourne encore mais en réalité c'est dernier sont terminés (c'était le cas pour la save SQL).
    Avez-vous des pistes car je ne sais vraiment pas ou chercher ?

    lundi 11 septembre 2017 22:54

Toutes les réponses

  • Première idée : éviter l'utilisation de .BAT et préférer l'utilisation de .CMD lorsque vous faites des appels.

    BAT fait appelle à command.com, un résidu de MS-DOS, alors que CMD fait appelle à cmd.exe, notre interpréteur préféré ici. Bien que cela soit mineurs en terme de différence, il en existe certaines comme par exemple la gestion de la variable d'erreur (un cmd la modifie en permanence, même sans erreurs). 

    Deuxième idée : écrire me script en PowerShell sera plus efficace pour gérer un code de sortie.

    mardi 12 septembre 2017 05:49
  • Bonjour,

    Il faudrait rechercher dans les batchs, quelles sont les commandes qui pourraient attendre une éventuelle saisie du clavier, ou validation particulière !

    Surtout si le traitement redémarre après action sur ce clavier...

    Le serveur est-il limité en ressources/mémoire au point qu'il n'ait plus les ressources nécessaires au traitement demandé? J'en doute.

    Donc, la logique serait de s'assurer qu'aucune interaction clavier ne soit nécessaire, en utilisant les tâches planifiées et/ou en fournissant un fichier d'entrée (validation automatique des demandes éventuelles).

    Sinon, (pour Loic),  il n'y a plus de COMMAND.COM sur Windows 10, Windows 2016, Windows 2012,... Il y a, à l'usage donc peu, voire aucune différence à utiliser des BAT ou des CMD, même si la logique voudrait qu'il vaudrait mieux utiliser les CMD. Dans le temps, cela permettait d'obtenir un affichage différent des fichiers dit "courts" sous la forme 8.3, mais ce n'est même plus le cas.

    A bientôt,


    Thierry DEMAN. Exchange MVP. MCSE:Messaging 2013,MCSE:Server Infrastructure 2012(83 MCPs). MCSA Office 365 https://mvp.microsoft.com/en-us/mvp/Thierry%20Deman-7660 http://base.faqexchange.info

    mardi 12 septembre 2017 06:42
  • (pour Thierry) : exact, je n'avais pas fait attention à sa version de windows. Ca reste une bonne pratique de mettre du .cmd pour éviter les petites galères, surtout dans les environnements cross-version (allant du 2k3 au 2k&2 par exemple). Merci pour ton commentaire précis!
    mardi 12 septembre 2017 09:46
  • Bonjour,

    Il faudrait rechercher dans les batchs, quelles sont les commandes qui pourraient attendre une éventuelle saisie du clavier, ou validation particulière !

    Surtout si le traitement redémarre après action sur ce clavier...

    Le serveur est-il limité en ressources/mémoire au point qu'il n'ait plus les ressources nécessaires au traitement demandé? J'en doute.

    Donc, la logique serait de s'assurer qu'aucune interaction clavier ne soit nécessaire, en utilisant les tâches planifiées et/ou en fournissant un fichier d'entrée (validation automatique des demandes éventuelles).

    Sinon, (pour Loic),  il n'y a plus de COMMAND.COM sur Windows 10, Windows 2016, Windows 2012,... Il y a, à l'usage donc peu, voire aucune différence à utiliser des BAT ou des CMD, même si la logique voudrait qu'il vaudrait mieux utiliser les CMD. Dans le temps, cela permettait d'obtenir un affichage différent des fichiers dit "courts" sous la forme 8.3, mais ce n'est même plus le cas.

    A bientôt,


    Thierry DEMAN. Exchange MVP. MCSE:Messaging 2013,MCSE:Server Infrastructure 2012(83 MCPs). MCSA Office 365 https://mvp.microsoft.com/en-us/mvp/Thierry%20Deman-7660 http://base.faqexchange.info

    Bonjour,

    J'ai déjà parcouru les scripts à la recherche d'une pause ou d'une demande de saisie utilisateur mais je n'ai rien trouvé.
    Comme je le disais cette anomalie c'est déjà produite sur la commande suivante, qui ne demande aucune entrée utilisateur.

    sqlcmd -iE:\BackupLOG.sql -vmoment="apres" datedujour="%dateTFJ%"

    Normalement le pourcentage d'avancement de la sauvegarde (qui dure environ 30min) s'affiche sur la console. Lors de l'anomalie, rien n'apparait. Et après plusieurs heures (quand on se rend compte du problème) quand on appuie sur une touche du clavier, la sauvegarde passe directement à 100% et le script continue.

    C'est pourquoi je pensais à un code retour que le script ne récupère pas. Il ne sait pas que l'action est fini et il ne continu pas.
    Autre piste, est-il possible que la mise en veille ou les options d'alimentations puissent amener à cette anomalie ?

    jeudi 14 septembre 2017 03:21