Problème crontab
Résolu
jisisv
Messages postés
3678
Statut
Modérateur
-
jisisv Messages postés 3678 Statut Modérateur -
jisisv Messages postés 3678 Statut Modérateur -
Bonjour à toutes et à tous,
J'ai une ligne dans mon crontab:
J'y ai placé des chemins coplètement spécifiés pour le débugage !
Le script:
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
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
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.)
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.)
J'ai ajouté une entrée cron
Ceci ne pose aucun problème:
Les utiltaires (en particulier env sont dans le PATH puisque
J'ai mis un PATH explicite dans maon script.
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
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)
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)
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 )
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 )
Par contre
36 19 * * * touch ${HOME}/tmp/mycrontab.works
fonctionne. HOME est bien défini..
Johan
Tu la modifies certes, mais rien ne nous dit que "$PATH" est bien déclaré avant ;-(
D'où ma proposition de sourcer ton environnement ;-)
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.