Copyright © 2004 Willy Smith
Copyright © 2004 Joëlle Cornavin
Copyright © 2004 Encolpe Degoute
Article paru dans le n°103 de la Gazette Linux de juin 2004.
Traduction française par Joëlle Cornavin
<jcornavi CHEZ club TIRET internet POINT fr>
.
Relecture de la traduction française par Encolpe Degoute
<encolpe POINT degoute CHEZ free POINT fr>
.
Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
Dans le paquetage at standard, nous n'avons trouvé aucun outil permettant de modifier l'heure d'une tâche at si jamais nous soumettons accidentellement à cette tâche un jour ou une heure incorrects. S'il y existe un outil de ce type, utilisez-le mais dans le cas contraire, ce script devrait suffire. En voici le source :
#!/bin/ksh if [[ "`id -u`" -ne "0" ]] then print "Vous devez exécuter cet utilitaire en tant que 'root'." exit 1 elif [[ "x$1" = "x" ]] || [[ "x$2" = "x" ]] then print "Usage: `basename $0` " print "Example: `basename $0` \"2004-05-20 04:00\" \"Thu May 20 18:00:00 2004\"" exit 1 fi I=0 J=0 TMP=/var/tmp/at AT_SPOOL=/var/spool/at TO=$((`date +%s -d "$2"` / 60)) set -A JOBS `atq | sort | grep -A100 "$1" | awk '{print $1}'` set -A FILES `cd $AT_SPOOL ; find -type f \! -name '.*' | sed 's/^\.\///g'` test -d $TMP || mkdir -m 0700 -p $TMP while [[ $I -lt ${#JOBS[*]} ]] do J=0 p=`echo "obase=16;${JOBS[I]}" | bc | tr A-Z a-z` while [[ $J -lt ${#FILES[*]} ]] do f=${FILES[J]} if [[ "`echo $f | cut -b 4-6`" = "$p" ]] then J=${#FILES[*]} h=`echo $f | cut -b 7- | tr a-z A-Z` d=`echo "ibase=16;$h" | bc` h=`echo "obase=16;$TO" | bc | tr A-Z a-z` n="`echo $f | cut -b 1-6`$h" TO=$(($TO + 60)) echo "Déplacer $AT_SPOOL/$f to $AT_SPOOL/$n" cp -f $AT_SPOOL/$f $TMP/$f chmod 0600 $TMP/$f mv -f $AT_SPOOL/$f $AT_SPOOL/${n} fi J=$(($J + 1)) done I=$(($I + 1)) done echo "Tous les changements ont été effectués. Vérifiez les sauvegardes dans $TMP et lancez 'atq' pour afficher les modifications." exit 0 |
Petite note sur son utilisation :
atmv {from} {to} |
Où les arguments from et to sont bien sûr les ancienne et nouvelle date et heures. Les deux ont des formats légèrement différents — pour de bonnes raisons.
Le premier argument from a le même format date+heure que la colonne 2 de la commande atq :
$ atq | sort 1397 2004-05-26 18:00 a mail |
Qui est aaaa-mm-jj HH:MM
Le second argument to est formaté de la même manière que la sortie de la commande date :
$ date Wed May 26 10:35:48 BST 2004 |
Mais avec l'omission du fuseau horaire.
Voici un exemple :
$ atmv "2004-05-<20 04:00" "Thu May 20 18:00:00 2004" |
Cette commande déplacera tous les travaux programmés de 4 h le 20 mai à 18 h le même jour, y compris toutes les tâches soumises après 16 h également :
$ atq | sort 1402 2004-05-27 00:00 a mail 1403 2004-05-27 01:00 a mail 1404 2004-05-27 02:00 a mail 1405 2004-05-27 03:00 a mail 1406 2004-05-27 04:00 a mail $ atmv '2004-05-27 02:00' 'Fri May 28 17:30:00 2004' $ atq | sort 1402 2004-05-27 00:00 a mail 1403 2004-05-27 01:00 a mail 1404 2004-05-28 17:30 a mail 1405 2004-05-28 18:30 a mail 1406 2004-05-28 19:30 a mail |
Comme vous pouvez le voir, il ne fournit qu'un incrément d'une heure entre deux déplacements. C'est tout ce que nous lui demandions, mais naturellement, comme je vais donner le code ici, changez-le selon vos souhaits, améliorez-le ou rendez-le plus souple. Il crée des sauvegardes des fichiers at originels sous /var/tmp/at en cas de problème.