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

Administration système Discussion :

Problème d’exécution d'un crontab


Sujet :

Administration système

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 199
    Par défaut Problème d’exécution d'un crontab
    Bonjour à vous,

    Je poste en désespoir de cause .
    Après avoir épluché le web, je ne trouve aucune solution à mon problème que voici.

    J'ai créé un script qui me ramène à l'aide de Rsync les données d'un serveur distant.
    Lors de l'exécution en ligne de commande pas de problème tous fonctionne à merveille.
    En revanche lorsque je l'ajoute dans mon fichier /etc/crontab il ne fonctionne pas.

    Voici les points qui peuvent vous aider à m'aider

    La ligne présente dans le crontab est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    25 10 * * * root /home/script/script_save
    Ce script à les droits d'exécution

    Lorsque je regarde dans le syslog j'ai cette ligne présente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nov  4 10:25:01 serveur /USR/SBIN/CRON[7928]: (root) CMD (/home/script/script_save)
    Enfin si je regarde dans mon fichier log d'exécution de mon script je vois bien que celui-ci à démarré mais ne se termine pas et ne s'exécute pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [04/nov./2014:10:25:01] Backup started
    Enfin pour finir voici mon script de sauvegarde

    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
     
            log="/var/log/sauvegarde_client.log"
            login="root"
            host="xxx.xxx.xxx.xxx"
            src="/home"
            dest="/home/sauvegarde_client"
            statut="completed successfully"
            ANNEE="`date +[%Y]`"
            MOIS="`date +[%m]`"
            DATE="`date +[%Y-%m-%d]`"
     
            cmddate="`date +[%d/%b/%Y:%H:%M:%S]`"
            echo "$cmddate Backup started" > $log
     
            # Création du dossier ANNEE
           if [ -d "$dest/old_data/$ANNEE" ]
           then
                   echo "Le repertoire existe deja !";
           else
                   mkdir $dest/old_data/$ANNEE;
           fi
     
            # Création du dossier MOIS
           if [ -d "$dest/old_data/$ANNEE/$MOIS" ]
           then
                   echo "Le repertoire existe deja !";
           else
                   mkdir $dest/old_data/$ANNEE/$MOIS;
           fi
     
            # Création du dossier jour
           if [ -d "$dest/old_data/$ANNEE/$MOIS/$DATE" ]
           then
                   echo "Le repertoire existe deja !";
           else
                   mkdir $dest/old_data/$ANNEE/$MOIS/$DATE;
           fi
     
            tab=(
                    "archives/"               
                    "prive/"
                    "public/"
            )
     
            fin=${#tab[*]}
            fin=$(( $fin - 1 ))
            for i in `seq 0 $fin`;
            do
                    cmddate="`date +[%d/%b/%Y:%H:%M:%S]`"
                    echo -n $cmddate ${tab[$i]} >> $log
                   rsync -v --update -r -e ssh --delete --backup --backup-dir=$dest/old_data/$ANNEE/$MOIS/$DATE/${tab[$i]} $login@$host:$src/${tab[$i]} $dest/${tab[$i]}
                    retour=$?
                    if [[ $retour == 0 ]]
                            then
                                    echo "Completed successfully" >> $log
                    else
                            echo "ERROR" >> $log
                            statut="ERROR"
                    fi
            done
     
            cmddate="`date +[%d/%b/%Y:%H:%M:%S]`"
            echo "$cmddate Backup termine $statut" >> $log
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Bonjour,

    Sous crontab, tu n'as pas de vraiment de tty d'ouvert, ce qui doit poser problème à la commande ssh.
    Réessaie avec -e "ssh -T -n" ou -e "ssh -o BatchMode=yes"

    Bon après, c'est peut-être une histoire de PATH car sous crontab en général, celui-ci est configuré au minimal, il ce peut donc que ton script ne trouve pas toutes les commandes.

    Ajout: la première ligne de ton script, le shebang est FAUX, il manque le "!" juste après le "#"

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 199
    Par défaut
    Bonjour disedorgue,

    Ajout: la première ligne de ton script, le shebang est FAUX, il manque le "!" juste après le "#"
    J'ai ajouté le "!" après le "#"

    -e "ssh -T -n"
    J'ai essayé cela au début ça n'a rien changé idem pour

    -e "ssh -o BatchMode=yes"
    Je ne sais plus trop quoi faire :/

    Je me demande si cela ne viendrait pas non plus de l'authentification SSH, car lorsque je lance mon script manuellement, je ne m’authentifie pas et peut être qu'avec cron cela coince :/

    Merci d'avance pour vos prochaines réponses.

    Nicolas

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Ok,
    Bon, pour le shebang, il faut le laisser comme dit avec un petit plus (pour ce mettre en mode debug):
    pour les option de ssh, on verra après, pour l'instant, on va essayer de voir ou cela bloque, pour cela, il suffit de modifier la ligne de la crontab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    25 10 * * * root /home/script/script_save >>/var/log/crontab_script.log 2>&1
    Comme ceci, tu auras tout le déroulement de ton script depuis la crontab dans le fichier /var/log/crontab_script.log

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 199
    Par défaut
    Bonjour disedorgue,

    J'ai trouvé mon problème tous seul grâce à tes réponses.

    En effet lors de ma première réponse j'avais écris le shebang comme ceci "# !/bin/sh" mais après ta réponse j'ai contasté qu'il fallait le collé.

    Du coup lorsque j'ai lancé mon script manuellement j'ai eu une erreur de syntaxe.

    Je me suis souvenu lors de mes recherches que parfois "/bin/sh" n'était pas implémenté et qu'il fallait à la place écrire "/bin/bash".

    J'ai donc essayé mon script manuellement qui a fonctionné et l'ai ajouté dans mon crontab sans ajouté tes options au départ et la miracle cela à fonctionné.

    Merci encore pour ton aide, la communauté Developpez.com est génial je trouve toujours une réponse à mes questions

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Le script étant en bash, je rajouterais au début de la crontab:
    et je remplacerais le shebang par

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

Discussions similaires

  1. problème d'exécution d'un crontab
    Par kaele dans le forum Administration système
    Réponses: 4
    Dernier message: 19/12/2008, 09h48
  2. [SHELL] Problème d'exécution script avec Crontab
    Par Leeloo_Multiboot dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/06/2008, 16h59
  3. Réponses: 1
    Dernier message: 28/06/2006, 16h07
  4. Réponses: 1
    Dernier message: 30/09/2005, 10h46
  5. Problème technique d'exécution (F9)
    Par Tendance dans le forum EDI
    Réponses: 6
    Dernier message: 19/10/2004, 15h10

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