Pb script lancé avec cron

Résolu/Fermé
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - 29 mai 2009 à 16:24
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 30 mai 2009 à 09:47
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)

8 réponses

Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
30 mai 2009 à 09:02
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
29 mai 2009 à 16:34
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
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
29 mai 2009 à 16:58
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
29 mai 2009 à 17:01
oui, le mettre au début du script
0
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
29 mai 2009 à 17:10
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
29 mai 2009 à 17:11
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
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
29 mai 2009 à 17:23
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
29 mai 2009 à 17:27
sur la ligne dans cron, récupérer les messages et erreurs dans le fichier logfile

* * * * * nom_du_script > logfile 2>&1
-1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
30 mai 2009 à 09:47
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