Tym-Project

From: SUPINFO
To: Tous
Subject: IT

Automatiser La Création Ou L'édition D'un Crontab

Crontab est un outil extrêmement pratique servant à planifier l’exécution des tâches/commandes. Habituellement il se gère via la commande [man]crontab[/man] : crontab -e pour éditer, crontab -l pour lister…et d’autres encore. crontab -u user -l permet de lister pour l’utilisateur en question. Mais comment faire pour scripter la création ou la modification d’une ligne dans un crontab ?

Tout se passe en fait dans le répertoire /var/spool/cron/crontabs :

root@Server:~# ls -l /var/spool/cron/crontabs/ total 8
-rw------- 1 root crontab 294 2010-07-12 19:54 root
-rw------- 1 server crontab 264 2010-07-24 10:54 server

Ajouter un crontab

Partons du principe que je veux ajouter un crontab pour l’utilisateur “tym” via un script. Il va donc falloir que je crée le fichier /var/spool/cron/crontabs/tym, oui mais que faire si il existe déjà ? On va se compliquer un peu la vie, mais vous allez comprendre pourquoi :

1
2
3
4
5
6
7
8
9
#!/bin/bash

CRONTAB="/var/spool/cron/crontabs/tym"

if ! [ -e $CRONTAB ];then
    touch $CRONTAB
    chown tym:crontab $CRONTAB
    chmod 600 $CRONTAB
fi

Comme vous pouvez le voir, on modifie les droits sur le fichier que lorsqu’il faut créer. Pour ajouter une tâche, rien de plus simple :

echo '*/1 * * * * /home/tym/scripts/mon_script' >> $CRONTAB

Attention à la syntaxe car ici pas de vérifications via la commande crontab !

Modifier une ligne de crontab

Je veux modifier la ligne que je viens de créer dans le crontab de “tym”, en faisant plutôt exécuter /home/tym/scripts/mon_second_script :

lang: bash
1
2
3
4
5
6
7
8
#!/bin/bash

CRONTAB="/var/spool/cron/crontabs/tym"

OLD="\/home\/tym\/scripts\/mon_script"
NEW="\/home\/tym\/scripts\/mon_second_script"

sed "s/$OLD/$NEW/" $CRONTAB > /tmp/buffer && cat /tmp/buffer > $CRONTAB

Et hop, l’affaire est pliée ! Notez l’utilisation des “\/” pour protéger les ”/” dans le sed.

Bonne planification ;-)

Comments