Page suivante Page précédente Table des matières

12. Comment utiliser cron quand la machine n'est pas constamment allumée

(section rédigée par C. Boudjnah)

Utilisez le package anacron

Pour l'utiliser créer un fichier /etc/anacrontab :


SHELL=/bin/sh            
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
                 
1       5       cron.daily      run-parts /etc/cron.daily

Ce fichier dit « Exécute tous les jours (1), cinq (5) minutes après le demarrage la commande run-parts /etc/cron.daily. Et enregistre le log dans le fichier /var/spool/anacrontab/cron.daily ».

Placer si nécessaire l'invocation d'anacron dans un fichier de démarrage (probablement dans /etc/rc.d/init.d/ :


#!/bin/sh
#
# chkconfig: 3 95 30
# description: Anacron

source /etc/rc.d/init.d/functions || { 
echo "Il apparait que votre distribution RedHat et pas configurez
correctement. /etc/rc.d/init.d/functions manquans" ; exit 1 }

wich anacron &> /dev/null || { 
  echo "Error anacron isn't in \$PATH ; exit 1 } && {
  ANACRON=`wich anacron`}

case "$1" in
  start)
  echo -n "Starting Anacron: "
  $ANACRON
  echo "Done."
  ;;
  stop)
  echo -n "Shutting down Anacron: "
  killproc anacron
  echo "Done."
  ;;
  status)
  status anacron
  ;;
  *)
  echo "Usage: anacron {start|stop|status}"
  exit 1
esac

exit 0

Le rendre exécutable par chmod +x /etc/rc.d/init.d/anacron. Puis (sous Debian) faites chkconfig --add anacron. Vous pouvez vérifier votre config par chkconfig --list anacron. Sous les autres distributions il suffira de tirer un lien symbolique dans le répertoire du runlevel approprié, par exemple :


cd /etc/rc.d/rc3.d
ln -s ../init.d/anacron S98anacron

À noter que dans le cron j'utilise run-parts pour lancer plusieurs fichiers dans un répertoire. Il et malheureusement pas disponible sur toutes les distributions mais il et possible de faire un petit script qui fasse la meme chose :


#!/bin/sh
DIR=$@

for chkdir in $DIR;do
        echo $chkdir
        if [ -d $chkdir ];then
    find $chkdir -type 'f' -perm '+a=x' -maxdepth 1 | xargs -n1
        else
                echo "$chkdir ne semble pas present"
        fi
done

Le rendre exécutable et le placer en /usr/local/bin/run-parts


Page suivante Page précédente Table des matières