Pb script lancé avec cron

Résolu
Kopros Messages postés 631 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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. Kopros Messages postés 631 Statut Membre 89
     
    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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
    0
  3. Kopros Messages postés 631 Statut Membre 89
     
    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à.
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      oui, le mettre au début du script
      0
  4. Kopros Messages postés 631 Statut Membre 89
     
    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.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
    0
  7. Kopros Messages postés 631 Statut Membre 89
     
    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
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    sur la ligne dans cron, récupérer les messages et erreurs dans le fichier logfile

    * * * * * nom_du_script > logfile 2>&1
    -1
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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.
    -1