Problème crontab

Résolu
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:

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



--
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)

3 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. jisisv Messages postés 3678 Statut Modérateur 936
       
      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
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    3. gm
       
      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
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    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
    1. gm
       
      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
  3. jisisv Messages postés 3678 Statut Modérateur 936
     
    Bêête que je suis. L'erreur provenait tout simplement d'une mauvaise orthographe du nom du script dans mon cron.
    0