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 :

Commande batch qui ne s'exécute pas jusqu'au bout


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut Commande batch qui ne s'exécute pas jusqu'au bout
    Bonjour,
    J'ai créé un script shell pour faire des backup entre 2 serveurs avec rsync.
    Voici le script :
    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
    echo "----- debut backup US" >> /media/sf_US/result_backup.txt ;
    date +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    rm -f /media/sf_US/CRRsyncUS.log;
    rsync -e "ssh" --log-file=/media/sf_US/CRRsyncUS.log -avz --delete-after administrator@server.com:'/Rep\ US' /media/sf_US/;
    date +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    echo "----- fin backup US" >> /media/sf_US/result_backup.txt;
     
    echo "----- debut backup FR" >> /media/sf_US/result_backup.txt ;
    date +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    rm -f /media/sf_US/CRRsyncFR.log;
    rsync -e "ssh" --log-file=/media/sf_US/CRRsyncFR.log -avz --delete-after --exclude '~*.*' /media/sf_Commun/ administrator@server.com:'/Rep_FR';
    date +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    echo "----- fin backup FR" >> /media/sf_US/result_backup.txt ;
     
    echo " " >> /media/sf_US/result_backup.txt ;
    rm -f /home/admin/CR_backup.zip;
    zip -j /home/admin/CR_backup.zip /media/sf_US/CRRsyncUS.log /media/sf_US/CRRsyncFR.log;
    /home/admin/mail_CR_backup.pl US-FR /media/sf_US/result_backup.txt /home/admin/CR_backup.zip;
    le script est lancé côté FR par un cron sur un serveur linux. Côté US c'est un server Mac OS.
    Le début se passe bien, mais c'est la création du zip qui ne se fait pas et l'envoie du mail via mon script perl.
    Pourtant quand je la lance à la main (hors cron) ça fonctionne...
    Une idée du problème ?
    Merci.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 465
    Points
    19 465
    Par défaut
    Bonjour,

    ce genre de comportement est, en général, dû à des commandes qui ne sont pas dans le PATH minimaliste de cron, et qui sont appelées sans chemin absolu.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Merci de ton retour.
    J'ai regardé, rm et date sont dans /bin et zip et rsync sont dans /usr/bin
    Je vais modifié le script en appelant le chemin absolu pour voir....

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Citation Envoyé par jejeman Voir le message
    Merci de ton retour.
    J'ai regardé, rm et date sont dans /bin et zip et rsync sont dans /usr/bin
    Je vais modifié le script en appelant le chemin absolu pour voir....
    Plutôt que changer les commandes une à une, tu peux aussi le lancer une fois en mettant au début echo $PATH > /tmp/pour_voir_le_path puis, en fonction du résultat, tu insères au début du script quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PATH=${PATH}:/usr/bin:/usr/sbin:/opt/bin # etc.
    Il faut aussi qu'il trouve la commande perl dans le chemin.

    Pour voir les traces et déterminer les commandes en erreur (si le cron ne t'envoie pas de mail), tu peux essayer d'insérer set -x au début de ton script "mon_backup .sh" et créer un lanceur à mettre dans le cron "lanceur_de_mon_backup.sh" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/sh
    /path/to/mon_backup.sh > /tmp/pour_voir_les_traces 2>&1

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Merci !
    J'ai tout modifié !
    Verdict ce soir !

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Bon j'ai réécrit mon script comme ç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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #!/bin/bash
     
    #User Variables
    DATE=/bin/date;
    RM=/bin/rm;
    RSYNC=/usr/bin/rsync;
    ZIP=/usr/bin/zip;
    PERL=/usr/bin/perl;
     
    #Backup US data
    $RM -f /media/sf_US/CRRsyncUS.log;
    echo "----- debut backup US" >> /media/sf_US/result_backup.txt ;
    $DATE +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    $RSYNC -e "ssh" --log-file=/media/sf_US/CRRsyncUS.log -avz --delete-after administrator@server.com.com:'/Rep\ US' /media/sf_US/;
    $DATE +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    echo "----- fin backup US" >> /media/sf_US/result_backup.txt;
     
    #Backup FR data
    $RM -f /media/sf_US/CRRsyncFR.log;
    echo "----- debut backup FR" >> /media/sf_US/result_backup.txt ;
    $DATE +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    $RSYNC -e "ssh" --log-file=/media/sf_US/CRRsyncFR.log -avz --delete-after --exclude '~*.*' /media/sf_Commun/ administrator@server.com.com:'/Rep_FR';
    $DATE +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    echo "----- fin backup FR" >> /media/sf_US/result_backup.txt ;
     
    #Email compte rendu
    echo "-" >> /media/sf_US/result_backup.txt ;
    $RM -f /home/admin/CR_backup.zip;
    $ZIP -j /home/admin/CR_backup.zip /media/sf_US/CRRsyncUS.log /media/sf_US/CRRsyncFR.log;
    $PERL /home/admin/mail_CR_backup.pl US-FR /media/sf_US/result_backup.txt /home/admin/CR_backup.zip;
    Et tout marche !!!
    Merci à tous !

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 851
    Points
    5 851
    Par défaut
    ÀMHA, c'était plus simple de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    PATH=${PATH}:/usr/bin # car /bin doit déjà y être
     
    #Backup US data
    rm -f /media/sf_US/CRRsyncUS.log;
    echo "----- debut backup US" >> /media/sf_US/result_backup.txt ;
    date +%d/%m/%Y-%kh%M >> /media/sf_US/result_backup.txt;
    rsync -e "ssh" --log-file=/media/sf_US/CRRsyncUS.log -avz --delete-after administrator@server.com.com:'/Rep\ US' /media/sf_US/;
    etc.
    Comme quoi, il peut y avoir plusieurs solutions!
    La tienne est plus exhaustive: elle montre bien les dépendances du script envers les outils unix utilisés. Elle permet aussi de choisir spécifiquement chaque outil (au cas où il y aurait plusieurs versions dans différents répertoires).
    La mienne est plus "standard" (pour la lisibilité) et souple: si tu modifies ton script et utilises une nouvelle commande (de /usr/bin), elle sera automatiquement prise en compte.

    Les coups et les douleurs...

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

Discussions similaires

  1. [1.x] fichier test qui ne s'execute pas jusqu'au bout
    Par erictomcat dans le forum Symfony
    Réponses: 2
    Dernier message: 20/08/2012, 23h04
  2. Fichier exécutable qui ne s'exécute pas ?!
    Par bnadem35 dans le forum Linux
    Réponses: 4
    Dernier message: 12/07/2006, 11h35
  3. Réponses: 8
    Dernier message: 08/05/2006, 20h40
  4. probleme de requete mysql qui ne s'exécute pas
    Par anto48_4 dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/03/2006, 10h51
  5. [MySQL] requete sql qui ne s'exécute pas
    Par anto48_4 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/03/2006, 09h12

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