Problème crontab

Résolu/Fermé
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 12 sept. 2011 à 18:10
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 31 oct. 2011 à 23:44
Bonjour à toutes et à tous,

J'ai une ligne dans mon crontab:

52 16 * * *  /home/johand/bin/shuffwall.sh > /home/johand/tmp/shuffwall.has_run


J'y ai placé des chemins coplètement spécifiés pour le débugage !
Le script:

#!/bin/sh
echo $0 |tee  /home/johand/tmp/NEWPATH

PATH=$PATH:/usr/bin
echo $PATH >> /home/johand/tmp/NEWPATH
WALL=${HOME}/Images/wallpapers
DEST=wallpaper

cd $WALL
[ -e $DEST ] && rm $DEST

ln -s $(ls -1 GNOME* | shuf -n 1) $DEST

Le problème
Le script fonctionne depuis la ligne de commande.
Le cron fonctionne car le fichier /home/johand/tmp/shuffwall.has_run est créé.
Par contre, ce dernier l est vide, malgré la présence de la ligne
echo $0 |tee /home/johand/tmp/NEWPATH

Le reste du script est à l'avenant , pas d'exécution.

Quelqu'un a-t-il déjà rencontré ce problème avec sa solution ?

Merci d'avance




3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
12 sept. 2011 à 18:58
Salut,

Essaie de sourcer ton .bashrc (ou assimilé en fonction de ton shell), parce que je doute que les variables "$PATH" et "$HOME"soient connues de la crontab ;-((

De même mets les chemin absolus pour tes commandes (/bin/rm, /bin/ln, etc.)
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 12/09/2011 à 19:38
C'est bien pour cela que je modifie la variable PATH.
Par contre
36 19 * * * touch ${HOME}/tmp/mycrontab.works
fonctionne. HOME est bien défini..

Johan
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
12 sept. 2011 à 20:02
C'est bien pour cela que je modifie la variable PATH.
Tu la modifies certes, mais rien ne nous dit que "$PATH" est bien déclaré avant ;-(

D'où ma proposition de sourcer ton environnement ;-)
0
Bonjour,

Je confirme : par sécurité, tout cronjob s'exécute dans un environnement quasi-vierge. Il faut déclarer explicitement toutes les variables d'environnement, soit dans le script, soit en sourçant son environnement.

Notamment, tu lances la commande tee sans chemin absolu avant de déclarer le PATH.
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 16/09/2011 à 15:06
J'ai ajouté une entrée cron
10 13 * * *  env > /home/johand/tmp/crontab_env

Ceci ne pose aucun problème:
johand@osiris:~/tmp$ ls -l crontab_env ; cat crontab_env  
-rw-r--r-- 1 johand johand 118 16 sep 13:10 crontab_env 
LANGUAGE=fr_BE:fr 
HOME=/home/johand 
LOGNAME=johand 
PATH=/usr/bin:/bin 
LANG=fr_BE.UTF-8 
SHELL=/bin/sh 
PWD=/home/johand 


Les utiltaires (en particulier env sont dans le PATH puisque
johand@osiris:~/tmp$ which tee ln rm 
/usr/bin/tee 
/bin/ln 
/bin/rm


J'ai mis un PATH explicite dans maon script.
PATH="/bin:/usr/bin"

Conclusion:
la redirection sur la ligne cron fonctionne (shuffwall.has_run)
Si le script était exécuté, même les echo produiraienr une sortie dans ce fichier, or il est de taille nulle.

Extrait de /va/log/syslog
 
Sep 16 14:40:01 osiris /USR/SBIN/CRON[26479]: (johand) CMD ([26479] source /home/johand/bin/shuffwall.sh > /home/johand/tmp/shuffwall.has_run

J'ai également essayé un sourcescript_name dans le cron afin d'être certain de récupérer l'environnement fourni par cron.
Je me perds en conjectures...

Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
0
Non... comment je suis passé à côté de ça...

Tes echo et ton tee écrivent dans /home/johand/tmp/NEWPATH
Ton script n'écrit rien sur la sortie standard, donc c'est normal que /home/johand/tmp/shuffwall.has_run soit vide.


Pour le problème d'exécution :
1) Ajoute un set -x au début de ton script
2) Redirige la sortie d'erreur dans un fichier ( 2>/tmp/stderr )
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
31 oct. 2011 à 23:44
Bêête que je suis. L'erreur provenait tout simplement d'une mauvaise orthographe du nom du script dans mon cron.
0