Pb script lancé avec cron

Résolu
Bonjour,

J'ai fait un petit script en bash qui télécharge un fichier.tar.gz et qui le décompresse.

Lorsque je lance ce script manuellement, tout se passe sans problème.
Je dois lancer régulièrement le script, du coup j'ai mis son lancement avec un crontab.

Je teste, et là à ma grande stupéfaction le fichier.tar.gz se télécharge bien mais il ne se décompresse pas.

Je ne comprends vraiment pas pourquoi ça ne marche pas quand je le lance avec cron et ça fonctionne quand je le lance à la main.
Est-ce que le script n'attend pas la fin du téléchargement avant d'essayer de le décompresser ? Comment résoudre ce problème ?

Merci d'avance pour vos réponses.

(La machine en question tourne sous Ubuntu 8.10)
Configuration: Ubuntu 9.04
Firefox 3.0.10

8 réponses

  1. Ben le log file était vide.
    Je sais pas pourquoi le fichier en bash semble se bloquer après le téléchargement.

    J'ai résolu mon problème en bidouillant :
    dans mon script de départ j'ai commenté la ligne pour dé compresser le fichier.
    J'ai créé un 2e script qui ne fait que décompresser le fichier, puis il le supprime (comme ça je ne rempli pas le disque dur avec des fichiers inutiles).
    Sous cron j'ai fait 2 lignes, une pour lancer le 1er script et l'autre pour lancer le 2e une minute après le 1er.

    Tout marche comme il faut, mais ce n'est pas très propre.
    Je ne peux pas forker le wget pour tout faire en 1 seul script (le bash ne supporte pas le fork) donc là comme ça je ne vois pas d'autre solution.

    Je pourrais faire les scripts en python, qui supporte le fork, mais je débute dans ce langage, donc c'est beaucoup plus simple pour moi de faire comme j'ai fait.

    Encore merci Dubcek, à plus tard !
    1. Contributeur
      Hello
      une tâche sous cron ne s'exécute pas avec l'environnement du login. Mettre la commande dans un fichier et placer au début du script
      source ~/.bashrc
      ou mettre le chemin complet devant les commandes
      1. Salut

        Dans mon cron j'ai mis le chemin complet. Voici la ligne entière :
        00 16 * * * sh /etc/dansguardian/maj.sh


        En gros, si j'ai bien tout compris, tu voudrais que je crée un nouveau script, et dedans je mettrais :
        source ~/.bashrc 
        sh /etc/dansguardian/maj.sh


        00 16 * * * sh /etc/dansguardian/nouveau_script.sh


        Ce serait plus simple de mettre
        source ~/.bashrc 

        directement au début su script maj.sh

        Je vais tester ça déjà.
        1. Contributeur
          oui, le mettre au début du script
      2. Ok.

        Ben... même résultat.
        J'ai aussi essayé un truc dans le script, au lieu de mettre la ligne de téléchargement, puis la ligne pour décompresser, j'ai mis le tout sur 1 seule ligne avec le séparateur &&.
        Je veux éviter qu'il tente de le décompresser avant la fin du téléchargement, mais ça ne marche toujours pas.

        Au pire c'est pas bien grave, c'est juste pour un exercice.
        Mais tout de même, ça m'embête beaucoup de pas parvenir à effectuer un truc aussi simple.
        1. Contributeur
          il faut mettre une ligne après l'autre pour que les commandes s'exécutent séquentiellement ou les séparer par ;
          peut-on voir le script
          1. En fait le script est sur une VM et le copier coller entre VM et pc hôte n'est pas géré.
            Je vais devoir partir, donc j'ai pas bcp de temps...

            En gros voilà ce que ça donne :

            #!/bin/bash
            source ~/.bashrc 
            cd <répertoire>
            wget <l'adresse du fichier.tar.gz> && tar -xvzf <fichier.tar.gz>


            Avant ma modif à la fin c'était :

            wget <l'adresse du fichier.tar.gz>
            tar -xvzf <fichier.tar.gz>


            Mais dans tous les cas j'ai le même résultat, cad ça marche sous console de l'utilisateur mais pas sous cron (cron lancé par le même user)

            Comme je l'ai dit je dois y aller, je ne répondrai donc pas tout de suite.
            En tout cas merci pour ton aide
            1. Contributeur
              sur la ligne dans cron, récupérer les messages et erreurs dans le fichier logfile

              * * * * * nom_du_script > logfile 2>&1
              1. Contributeur
                en bash, le fork, c'est dire lancer un job en background se fait avec &
                command &
                c'est bizarre parce qu'à part l'environnement, il n'y pas de raisons qu'un script ne fonctionne pas sous cron. Mettre des traces dans le script ou en mode debug
                peut être une option pour wget sachant que depuis cron, le job n'est pas rattaché à un terminal.