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

Linux Discussion :

Tache de fond & arret terminal


Sujet :

Linux

  1. #1
    Membre éprouvé Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Points : 1 241
    Points
    1 241
    Par défaut Tache de fond & arret terminal
    Bonjour,

    je travaille sur le migration d'une base de donnée de Unix (SUN Solaris) vers Red Hat ES4.
    J'ai une premiere phase qui consiste à faire un Dump des données sur le SUN. Pour cela, j'ai un script dump.sh qui est lancé en tache de fond
    ce script dump.sh lance lui meme plusieurs script et commandes.

    Comme le script est lancé en tache de fond, j'ai essayé d'éteindre mon PC pour voir si ca tournait toujours et le resultat est....non.
    En fait, mon script dump.sh lance plusieurs commandes propres à ma base de données.
    Lorsque je coupe mon terminal, la commande en cours continue, puis lorsqu'il doit revenir dans dump.sh, il semble d'arrêter.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #DUMP.SH
    RETOUR=`$DLC/bin/_progres $BAS -1 -b -p /usr/w/prod/newmag/src/dumpdonnees.p`
    ....
    echo "je suis la"
    .....
    RETOUR=`$DLC/bin/_progres $BAS -1 -b -p /usr/w/prod/newmag/src/dumpdonnees2.p`
    ....
    je lance dump.sh &
    Le script lance ma premiere commande.
    Je coupe mon terminal.
    Lorsque je rallume, la premiere commande s'est terminée mais je n'ai ni mon echo ni ma seconde commande. Le script s'est arrêté.

    Je ne comprend pas bien le fonctionnement.
    Quelqu'un peut m'expliquer ?
    merci

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Les processus lancés en tache de fond sont tués lorsque leur processus parent meurt aussi.

    Du coup, fermer la connexion, le terminal, dans lequel le processus a été lancé et détaché (&), tue aussi le processus.

    Pour éviter cela, il vaut mieux lancer le processus en lui signifiant de ne pas s'arrêter lorsqu'il reçoit le signal de la mort du parent (Hang Up). On peut ainsi faire : nohup signifie No Hang-Up.

    Cette commande rend le système (le processus init, même, si ma mémoire est bonne) parent du processus qu'on lui donne. Ainsi, le processus est sûr d'aller à son terme car le processus système ne meurt qu'en cas d'arrêt de la machine.

    Il ne faut pas oublier de détacher, aussi, le processus en le passant en tache de fond avec &.

  3. #3
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Tu devrais te faire un fichier de logs : les echo sur le terminal c'est bien mais pas top.
    Toutes les sorties standards sont redirigées vers un fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/sh
    LOGFILE=/var/log/mondump.log
    date >> $LOGFILE
    ...
    echo "Mon premier dump s'est bien passé" >> $LOGFILE
    ...
    echo "Mon deuxième dump s'est bien passé" >> $LOGFILE
    ...
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/sh
    {
    LOGFILE=/var/log/mondump.log
    date 
    ...
    echo "Mon premier dump s'est bien passé" 
    ...
    echo "Mon deuxième dump s'est bien passé" 
    ...
    } | tee -a $LOGFILE

  4. #4
    Membre éprouvé Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Points : 1 241
    Points
    1 241
    Par défaut
    Merci de votre aide.

    J'ai un fichier Log.
    Et c'est comme ca que je vois que mon script ne va pas au bout mais que ma premiere commande se deroule jusque à son terme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <div style="text-align: left;">#DUMP.SH
    RETOUR=`$DLC/bin/_progres $BAS -1 -b -p /usr/w/prod/newmag/src/dumpdonnees.p`
    ....
    echo "je suis la"  >> MONLOG
    .....
    RETOUR=`$DLC/bin/_progres $BAS -1 -b -p /usr/w/prod/newmag/src/dumpdonnees2.p`
    ....</div>
    en fait, j'ai lancé cela hier soir à 19h.
    Ma premiere commande dure jusqu'à environ 23h.
    La seconde doit prendre le relai et dure jusqu'au lendemain matin.
    J'éteins mon poste à 19h30.

    Ce matin, je regarde ce qu'il s'et passé.
    Ma premiere commande s'est bien terminée (vers 23h) et apres plus rien.

    Je pensais que le fait de mettre le script en tache de fond le rendait indépendant de mon terminal.

    En effet, maintenant que vous en parlez, je connais un peu NOHUP mais je ne connais pas assez bien le fonctionnement des commandes et des terminaux associés.

  5. #5
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Le gros avantage de la commande nohup, c'est qu'en plus, elle garde au chaud tous les affichages et les echos : tout est redirigé dans un fichier nohup.out ou $HOME/nohup.out.

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

Discussions similaires

  1. Faire tourner une Application en Taches de fond
    Par ArkAng3 dans le forum MFC
    Réponses: 3
    Dernier message: 26/08/2005, 15h06
  2. Réponses: 3
    Dernier message: 07/06/2005, 15h44
  3. [application tache de fond] lancer une application
    Par jean-jacques varvenne dans le forum Général Python
    Réponses: 5
    Dernier message: 25/03/2005, 12h13
  4. executer une page en tache de fond
    Par Invité(e) dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/01/2005, 17h23
  5. [Question] serveur en tache de fond
    Par Nicaisse dans le forum Réseau
    Réponses: 11
    Dernier message: 14/08/2003, 11h47

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