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

Shell et commandes GNU Discussion :

Shell dans shell, tourne sans arrêt


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Shell dans shell, tourne sans arrêt
    Bonjour,

    ca fait plusieurs jours que je travaille sur un programme pour extraire des résultats d'une simulation et j'ai quelques problèmes:

    J'ai un shell qui démarre ma simulation et qui une fois le calcul terminé doit lancer un autre shell qui s'occupe d'extraire les fameux résultats, les mettre dans un dossier, le transfert sur un autre PC et lance le traitement des données avec MATLAB.
    Il y a déjà longtemps que j'utilise le premier donc de ce coté là, rien à signaler mais lorsque que j'intègre le second, il est bloqué dans un boucle qui me refait sans aret ma simulation, ce que je ne veux pas. Vous en pensez quoi?

    Voici le premier shell:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #!/bin/sh
     
    SIM_TAB=( 'Cas_test' )
    PRO_NUM=8
    DESTINATION= BLABLA
     
     
    # ==========BOUCLE==================
    SIM_NUM=${#SIM_TAB[*]}
     
    for((i=0;i<=($SIM_NUM - 1);i++))
    do
    SIM_NAME=${SIM_TAB[$i]}
     
    BATCH_NAME=$SIM_NAME'.sh'
    cp batch-4-18.sh $SIM_NAME/$BATCH_NAME
    cd $SIM_NAME
    qsub -pe mpich $PRO_NUM $BATCH_NAME
     
     
    # =======ATTENTE FIN DE CALCUL==========
     
    while [ $(qstat -r | grep -c $BATCH_NAME) -gt 0 ]
    do sleep 15
    done
     
    # =======EXTRACTION DES RESULTATS AVEC STAR CD======
    cd ..
    . ./Extraction_donnees.sh
     
    echo "Simulation Ended" | mail -s " $SIM_NAME ended " EMAIL
     
    done
     
    rm nohup.out
     
    done
    Et voici le second:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #!/bin/sh
     
    echo "Simulation Ended" | mail -s " $SIM_NAME debut extraction " jonathan.brulatout.1@ens.etsmtl.ca
     
    # ===== CHANGEMENT DU DOSSIER =====
    source ./Simulation_18_extract.sh
    cd $SIM_NAME
     
    # ======EXTRACTION DES RESULTATS AVEC STAR CD=====
    source /share/apps/starcd-4.18/etc/setstar
    prostar x << EOT
    Injecteur_Diesel
    Y
    Y
    ifile,/state/partition1/home/jbrulatout/Data_Extraction/Export_data_only_dat_trkc.inp
    quit
    N
    EOT
     
    # Fonctionnement: Les commandes de STAR CD sont à insérer entre les deux EOT. Les trois premières lignes
    # correspondent respectivement au "Case name", "Resume from model?", "Resume echo file". Ensuite viennent
    # les commandes que l'on veut executer puis quitter l'application et savegarder ou pas suivant le cas.
     
     
    # =====CREATION DU DOSSIER ANALYSE ET DEPLACEMENT DES FICHIERS=====
    mkdir Analyse/
    mv Injecteur_Diesel.trkc Injecteur_Diesel.dat Analyse/
     
     
    # =======TRANSFERT DES DONNÉES======
    cd ..
    expect - <<ENDSCRIPT
      set timeout -1
      spawn scp -r $SIM_NAME $DESTINATION
      expect {
           "*password:*"
           {
              send "Jbr5a4.t\r"
              exp_continue
          }
      }
    ENDSCRIPT
     
    echo "Simulation Ended" | mail -s " $SIM_NAME ended " EMAIL
     
    # =====CONNEXION LATNA=====
    expect - <<ENDCONNEXION
      set timeout -1
      spawn ssh PC_DISTANT
      expect {
           "*password:*"
           {
              send "MDP\r"
              exp_continue
          }
      }
    ENDCONNEXION
     
    # =====EXTRACTION DES DONNEES AVEC MATBLAB=====
    cd Simulation_Doctorat/Simulation_Recuperation/Last_day/$SIM_NAME/Analyse
    matlab -nodesktop -nosplash - nojvm -r "addpath('/home/jbrulatout/Simulation_Doctorat/2_Analyse_Matlab'); Droplet$
     
    # =====QUITTER LE LATNA=====
    #exit
    Merci beaucoup pour votre aide
    Bonne soirée

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Pourrais tu nous donner les noms de tes scripts et aussi avoir un aperçu du script sourcer dans le deuxieme script qui appelle peut-être le premier qui appelle le second qui source le script qui appelle le premier,etc... ?

    il y a aussi d'autres scripts appelé, tu es peut-être dans une boucle infernale...

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    le mot qui détermine un document en ligne (here-doc) ne peut pas être "tabulé"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    commande <<EOF
    arg_1
    arg_2
    EOF
    ou alors il faut en instruire le here-doc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    commande <<-eof
    arg_1
    arg_2
            eof
    où les espaces avant le dernier eof est une vraie tabulation (les éditeurs peuvent être paramétrés pour remplacer les tabulations par un certain nombre d'espaces).

    et il y a un done en trop dans le premier script.

    fais attention : /bin/sh peut ne pas être bash, et alors certaines extensions (telles les boucles for avec évaluation arithmétique : for (( i=0; i<=n;i++))) provoqueront une erreur.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Le premier script s'appelle Simulation_18_extract.sh et il est appellé dans le second qui s'appelle Extraction_donnees.sh. Mais il n'y a pas d'autre script qui entrent en jeu.
    Donc la boucle doit se faire à cause du premier script.

    J'ai modifié le EOF, mais ça ne change rien.

    Pour ce qui est du /bin/sh, je ne pense pas qu'il y est de problème vu que le script fonctionne bien depuis longtemps avec ça mais je me trompe peut être.

    J'ai ajouté des commandes pour un envoi de mail dans les scripts et j'ai l'impression qui se passe la chose suivante:
    - Le script 1 appelle le second
    - Le second débute
    - Mais au lieu de reprendre après l'appel du second script, il redémarre du début du premier script sans exécuter les commandes que j'ai entre les EOT...

    Pourtant avant de mettre ça dans un shell, j'ai essayé les blocs en les entrant moi même dans le terminal et ça fonctionnait... Y a t il une réelle différence entre les deux?

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Citation Envoyé par Jo33140 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    . ./Extraction_donnees.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    source ./Simulation_18_extract.sh
    J'ajoute une troisième citation venue de ma console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ help source
    source: source filename [arguments]
        Execute commands from a file in the current shell.
    Donc tu as bien un fichier qui exécute l'autre et inversement.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Par défaut
    Dans un cas pareil, il y a une solution qui permet de savoir ce qui se passe:à la place du classique
    Avec ça, on voit les commandes executees, et on n'a plus à jouer aux devinettes.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Effectivement c'est le source ./Simulation... qui posait problème. J'avais mis ça pour que le second script charge les variable du premier mais c'était une erreur de ma part...

    J'ai maintenant d'autres erreurs qui apparaissent, je vais gosser un peu et si ça marche pas, je reviendrai vers vous!

    En tout cas merci pour votre aide!!

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

Discussions similaires

  1. While tourne sans arrêt
    Par joyeux2000 dans le forum Langage
    Réponses: 2
    Dernier message: 20/05/2011, 11h18
  2. Requête sql qui tourne sans arrêt
    Par hammag dans le forum SQL
    Réponses: 13
    Dernier message: 12/01/2010, 12h31
  3. Utilser sqlldr dans shell sans indiqué userid
    Par KHOULALENE dans le forum Outils
    Réponses: 4
    Dernier message: 21/03/2008, 11h09
  4. Localhost qui tourne sans arrêt et rien d'autre
    Par __fabrice dans le forum Apache
    Réponses: 3
    Dernier message: 22/03/2007, 23h16
  5. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37

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