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 POSIX Discussion :

comment éxécuter un script ?


Sujet :

Shell et commandes POSIX

  1. #1
    Membre actif
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut comment éxécuter un script ?
    bonjour,


    je veux faire un script qui détecte la présence d'un fichier ou des fichiers dans un reperetoire REPER

    /osp/local/home/linus/REPER

    faire le script je sais le faire mais je ne sais pas comment faire éxecuter le script dès que il y a un ou plusieurs fichiers dans le reperetoire ?
    je serais très reconnaissant si on me donnait la réponse.

    sincères mercis
    lastmagik

  2. #2
    Membre chevronné
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 236
    Par défaut
    Salut,

    Pour te donner quelques éléments: tu peux lister le contenu du fichier régulièrement et tant que la liste est vide attendre, avant de recommencer.
    Si la liste est non vide alors tu lances ton script.

  3. #3
    Membre actif
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut bonjour Malinaka
    bonjour Malinaka,

    est ce que tu pourrais donner un exemple pour que ce soit plus explicite et facile à comprendre ?

    sincères mercis
    lastmagik

  4. #4
    Membre actif
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut Rebonjour Malinaka
    Malinaka,

    je comprend ce que tu veux dire mais ma question est comment exécuter en permanence le script ?

    sincères mercis
    lastmagik

  5. #5
    Membre chevronné
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 236
    Par défaut
    J'aime pas donner des solutions prémachées mais en gros ta structure de lancement donnera quelque chose dans ce goût la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while true do
              n=ls "mondossier"
             if[ n -ge 1 ]  
             then
                   (appel de ton scritp)
             fi
             sleep 30 
    done

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    tu le lances en mode respawn dans l'inittab
    ce qui le fait donc tourner en boucle y compris si tu le kill ou si un process le kill, ou si il plante, etc...etc... et bien sur si la crontab est stoppée pour maintenance ou autre ça continue à tourner etc.... donc c'est la bonne solution pour ce genre de traitements qui attendent des fichiers en entrée...

    le script ressemble alors à ça

    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
    #!/bin/sh
     
    sleep 10 # pour pas saturer le disque en terme d'accès pour pas ralentir ou figer la machine !!!!!! 
    #le temps à définir selon le rôle réel de la machine et le taux d'accès disque moyen etc....
     
    ta_fonction()
    {
         #test si le fichier est utilisé ou pas 
         # si il ne l'est pas c'est que l'enregistrement est terminé et tu peux traiter
              #traitements de tes fichiers
         # sinon il faut juste attendre l'itération suivante du script
    }
    if [ -f /osp/local/home/linus/REPER/* ] ; then 
    ta_fonction # traitement du/des fichier(s)
    fi
    exit 0

  7. #7
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par Malinaka Voir le message
    J'aime pas donner des solutions prémachées mais en gros ta structure de lancement donnera quelque chose dans ce goût la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while true do
              n=ls "mondossier"
             if[ n -ge 1 ]  
             then
                   (appel de ton scritp)
             fi
             sleep 30 
    done
    éviter de faire des ls dans une boucle en particulier pour compter les lignes !!!
    en plus là ça fait 2 scripts ce qui ne sert à rien du tout. à part à générer des problèmes ou erreurs dans l'avenir....en plus c'est chiant à maintenir ...

  8. #8
    Membre actif
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut bonjour Malinaka et frp31
    bonjour Malinaka et frp31

    merci beaucoup pour vos retours très explicites, c'est gentil.

    je vais étudier les solutions que vous m'avez proposé.
    en tous cas ils me semblent toutes très rationnelles.

    "j'aime le sleep cela va donner un peu de souffle à la machine .."

    sincères mercis
    lastmagik

  9. #9
    Membre actif
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut recurssive
    bonjour Malinaka, et frp31,

    pour éviter de utiliser la boucle est ce que je peux utiliser un fichier éxecutable récurssive ?

    par exemple, dans le fichier éxecutable salutation.sh

    salutation.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    echo bonjour
    sleep 10
    salutation.sh
    alors tous les 10 secondes il va écrire
    bonjour

    sincères remerciement
    lastmagik

  10. #10
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    un script ne doit pas être récursif car la notion de processus parent/enfant tu vois de suite que ça va faire des milliers de processus, qui sans erreurs vont attendre et saturer le système en nombre de processus.

  11. #11
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    En revanche avec un "exec" ça devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo bonjour
    sleep 10
    exec salutation.sh

  12. #12
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    oui pas bête mais je ne comprend tjrs pas l'interêt de faire comme ça alors que l'inittab est fait pour

  13. #13
    Membre actif
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut bonjour frp31
    bonjour frp31, matafan,

    frp31

    tu disait :
    tu le lances en mode respawn dans l'inittab
    c'est que je ne sais pas comment utiliser ce mode respawn dans l'inittab ...
    crontab je sais et je l'utilise souvent par contre inittab jamais encore entendu ..

    pourrais tu donner plus de détails sur inittab et mode respawn dans l'inittab ?

    matafan

    merci pour exec, mais ma question est exec veut dire au lieu de faire plusieurs processus il va faire seulement un seul à killer pour tous les salution.sh lancés ?

    sincères remerciements
    lastmagik

  14. #14
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    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
    # Le niveau d'exécution par défaut
    id:2:initdefault:
     
    # Initialisation du système
    si::sysinit:/etc/rc.d/rc.sysinit
     
    # Les différents niveaux d'exécution
    l0:0:wait:/etc/rc.d/rc 0
    l1:1:wait:/etc/rc.d/rc 1
    l2:2:wait:/etc/rc.d/rc 2
    l3:3:wait:/etc/rc.d/rc 3
    l4:4:wait:/etc/rc.d/rc 4
    l5:5:wait:/etc/rc.d/rc 5
    l6:6:wait:/etc/rc.d/rc 6
     
    # Intercepter les touches CTRL-ALT-DELETE
    ca::ctrlaltdel:/sbin/shutdown -t3 -r now
     
    # Démarrer en mode graphique sous xdm
    x:5:respawn:/opt/kde/bin/kdm -nodaemon
     
    # Arrêt de la machine 2 mn après le signal donné par l'UPS s'il y a une coupure d'electricité.
    pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
     
    # Annulation de l'arrêt si l'électricité est rétablie.
    pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
     
    # Création des différentes consoles (CTRL ALT F[1-6])
    1:2345:respawn:/sbin/mingetty tty1
    ça c'est un inittab classique quasi vide presque minimaliste.

    mais tu peux lancer ton propre programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    99:345:respawn:/usr/bin/scripts/toncode.sh
    il tournera en permanence dans le runlevel 3 et +

    un exemple concret :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # MythTV Backend
    mt:2345:respawn:/bin/su - mythtv "/usr/local/bin/mythbackend -l /var/log/mythtv/mythbackend"
    qui en plus force l'usage d'un compte spécifique pour l'exécution.


    la liste des options utilisables :
    http://osr507doc.sco.com/en/OSAdminG...g_inittab.html

  15. #15
    Membre actif
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut re-bonjour
    frp31, matafan

    frp31,

    je vois c'est bien et efficace ....
    la machine unix que je utilise est une machine de la société et je n'ai pas le droit de toucher à son inittab.

    cependant, si il te plaît j'aimerai suivre le idée de matafan, avec exec dans

    salutation.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo bonjour
    sleep 10
    exec salutation.sh

    mais comme tu disait :
    un script ne doit pas être récursif car la notion de processus parent/enfant tu vois de suite que ça va faire des milliers de processus, qui sans erreurs vont attendre et saturer le système en nombre de processus.
    ma question est si avec exec on a que un processus qui marchera ce serai très bien, est ce que c'est bien le rôle de exec est de faire marcher que un SEUL processus ?

    c'est à dire, dans

    salutation.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    echo bonjour
    sleep 10
    #jusque ici le processus est sur la premiere salutation.sh
    
    #maintenant avant de faire le prochain fichier script
    #salutation.sh, exec  arrête la première 
    #salutation.sh et execute le prochain salutation.sh
    exec salutation.sh
    et comment saurai je que salution.sh est un seul processus quand je ferai
    ?

    sincères remerciements
    lastmagik

  16. #16
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    exec remplace le programme par l'exécutable que tu lui donnes en argument. Aucun nouveau process n'est crée. C'est toujours le même process (même PID), mais il exécute quelque chose d'autre.

    Quand tu fais "command", le shell fait un fork() puis un execve() dans le process fils et un wait() dans le process père. Quand tu fais "exec command", le shell fait un execve() sans faire de fork avant.

  17. #17
    Membre actif
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut
    bonjour Malinaka, frp31, matafan,

    dans

    salutation.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo bonjour
    sleep 10
    exec salutation.sh
    j'ai fait en même temps
    fuser salutation.sh
    et on a
    le avantage avec exec c'est que on a que UN SEUL processus
    au cours de l'éxécution de salutation.sh.
    Donc facile à gérer (avec kill -9) en cas de besoin de arrêter le processus en cours de éxécution.

    le boucle de Malinaka, personnellement je ne pense pas que c'est érroné ou faux.
    Je pense même c'est bien. Mais les mises en garde de frp31 m'a fait
    réfléchir deux fois !
    alors ma conclusion est pour mon cas, exec est la méilleure solution.
    est ce que ce script avec la présence de fuser est érroné ou faux ?
    salutation.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fuser salutation.sh
    echo bonjour
    sleep 10
    exec salutation.sh
    je l'ai éxécuté il a pourtant l'air de bien marcher quand même.

    sincères mercis
    lastmagik

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2011, 11h01
  2. Comment en double cliquant éxécuter un script (.m file)
    Par LordPeterPan2 dans le forum MATLAB
    Réponses: 6
    Dernier message: 01/09/2008, 08h47
  3. comment executer un script perl svp?
    Par nico72 dans le forum Langage
    Réponses: 8
    Dernier message: 13/07/2005, 09h51
  4. Petit prog pour éxécuter un script PHP
    Par Sub0 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 3
    Dernier message: 26/04/2005, 15h53
  5. [DEBUTANT]Comment executer un script sql
    Par peaceinpal dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2004, 08h44

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