Programmez vos tâches à l’avance

Il peut être très commode de programmer des tâches sur son ordinateur à l’avance : travaux de maintenance, reboot, lancements de calculs sur un cluster en heures creuses etc. L’architecture Unix/Linux fournit pour cela trois programmes géniaux : cron, anacron et at.

Si j’ai déjà fait l’éloge de cron, qui permet de lancer des tâches à dates régulières (« toutes les deux heures », « tous les jeudis » etc.), je n’avais pas encore parlé de anacron ni de at.

anacron

anacron est basé sur cron (le préfixe a signifiant anachronistic), mais ces deux programmes sont en fait complémentaires. Si vous programmez une cron lors de extinction de votre machine, cette cron n’aura jamais lieu. L’idée de anacron est donc de dire « fais-moi cette tâche une fois par jour », sous-entendu « dès que tu peux ».

Contrairement à cron, anacron n’est pas un service (ou daemon), il ne fonctionne donc pas en arrière plan, mais seulement au démarrage de la machine et à intervalles réguliers (d’où l’utilité de cron pour anacron). anacron utilise des fichiers dateurs pour déterminer depuis combien de temps les tâches planifiées n’ont pas été exécutées (ces fichiers se trouvent dans /var/spool/anacron). Pour programmer une anacron, il faut éditer le fichier /etc/anacrontab, qui ressemble à ça :

 # /etc/anacrontab: configuration file for anacron
 
 # See anacron(8) and anacrontab(5) for details.
 
 SHELL=/bin/sh
 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
 # These replace cron's entries
 1	5	cron.daily	 nice run-parts --report /etc/cron.daily
 7	10	cron.weekly	 nice run-parts --report /etc/cron.weekly
 @monthly	15	cron.monthly nice run-parts --report /etc/cron.monthly

Les entrées sont donc composées de 4 colonnes, séparées par des tabulations :

  1. période souhaitée (en jours),
  2. délais entre les tâches (en minutes) pour éviter de lancer deux fois une même tâche au même moment,
  3. étiquette pour le nom du fichier dateur,
  4. tâche à exécuter.

Vous aurez remarqué que la fréquence maximale pour anacron est une fois par jour, au delà il faut utiliser cron (qui peut aller jusqu’à une fréquence de 1 par minute). On peut lancer manuellement anacron suivant différents modes :

Forcer l’exécution de toutes les tâches

anacron -f

Mettre à jours les fichiers dateurs, sans exécuter les tâches

anacron -u

Afficher les messages d’exécution et les enregistrer dans /var/syslog

anacron -d

Bon à savoir : sur un ordinateur portable, si le système détecte que la machine fonctionne sur batterie, anacron ne lancera aucune tâche.

Commande « at »

La commande at, comme son nom l’indique, permet de demander à exécuter une commande à une date donnée. Contrairement à cron, at sert pour les tâches ponctuelles. Son utilisation est élémentaire. Exemple si on veut programmer une tâche à 20h le 31 décembre 2013 :

dorian@dorian:~$ at 20:00 12/31/13
warning: commands will be executed using /bin/sh
at>

Ensuite, le prompt nous donne la main pour indiquer la liste des commandes à exécuter. Une fois toutes les commandes rentrées, l’habituel Ctrl+D pour sortir du prompt. Notez le format de date, peu habituel pour nous autres de la langue de Brassens, qui nous vient des Etats Unis : mm/jj/aa

Il est possible de donner des dates relativement à la date du jour :

at 03:00 +2 days

Pour exécuter une commande à 3h du matin dans deux jours.

at now +2 hour

Pour exécuter une commande dans 2 heures.

Listez les commandes programmées

La commande atq vous donnera toutes les commandes programmées. La première colonne donne le numéro de chaque tâche à venir, la deuxième donne la date d’exécution et la dernière indique quel utilisateur a programmé cette tâche.

Supprimez un tâche programmée

Connaissant, le numéro d’une tâche, il suffit de lancer la commande atrm suivi de ce numéro pour la supprimer.

Programmer l’extinction de l’ordinateur

Pour ce faire, inutile de passer par la commande at, la commande shutdown faisant cela tout seul (en tant que super utilistateur).

Eteindre l’ordinateur à 23h30 :

shutdown -h 23:30

Redémarrer l’ordinateur maintenant :

shutdown -r now

Annuler une procédure d’arrêt :

shutdown -c

Pour aller plus loin