implémenter --show-ctnow, --force-ctnow et -r

This commit is contained in:
Jephté Clain 2014-08-20 09:35:45 +04:00
parent d40ca86347
commit acb281dac6
1 changed files with 40 additions and 14 deletions

View File

@ -207,7 +207,7 @@ OPTIONS
utilisé. Si name est vide ou vaut \$USER (soit $USER en l'occurence),
copier le fichier spécifié vers le chemin $USCRONTAB_USERFILE
Sinon, copier le fichier spécifié vers $USCRONTAB_USERDIR/name
-r, --remove XXX non implémenté
-r, --remove
Supprimer le script uscrontab spécifié. L'argument doit être le nom du
script à supprimer. Si l'argument n'est pas spécifié ou vaut \$USER
(soit $USER en l'occurence), supprimer le fichier $USCRONTAB_USERFILE
@ -223,11 +223,6 @@ OPTIONS
$USCRONTAB_USERDIR
-n, --fake
Afficher au lieu de les exécuter les commandes qui doivent être lancées
--show-ctnow XXX non implémenté
Afficher l'heure de référence au format crontab 'min hou day mon dow'
--force-ctnow 'min hou day mon dow' XXX non implémenté
Pour le développement, forcer la valeur de l'heure de référence. Il faut
respecter le format, sinon les résultats ne sont pas garantis.
OPTIONS AVANCEES
--lock LOCKFILE
@ -253,7 +248,16 @@ OPTIONS AVANCEES
de faire des tests par exemple sur l'environnement avant de lancer les
scripts planifiés. Si l'environnement ne convient pas, il suffit au
script de contrôle de retourner le code d'erreur spécifique pour arrêter
le traitement."
le traitement.
--show-ctnow
Afficher l'heure de référence au format crontab 'min hou day mon dow'
Cette valeur peut être utilisée avec l'option --force-ctnow dans des
tests pour reproduire une condition spécifique.
--force-ctnow 'min hou day mon dow'
Pour le développement ou des tests, forcer la valeur de l'heure de
référence. Il faut respecter le format, sinon les résultats ne sont pas
garantis. Le mieux est de reprendre le résultat de l'option --show-ctnow
en le modifiant un peu si nécessaire."
}
function set_usercrontabs() {
@ -266,6 +270,18 @@ function set_usercrontabs() {
eval "${1:-usercrontabs}"'=("${_userfile[@]}" "${_userdir[@]}")'
}
function get_usercrontab() {
# trouver le chemin correspondant au crontab $1. Si $1 n'est pas spécifié ou
# vaut $USER, afficher $USCRONTAB_USERFILE, sinon afficher $USCRONTAB_USERDIR/$1
local name="$1"
[ "$name" == "$USER" ] && name=
if [ -n "$name" ]; then
echo "$USCRONTAB_USERDIR/$name"
else
echo "$USCRONTAB_USERFILE"
fi
}
USCRONTAB_CTLINE="* * * * * $script"
USCRONTAB_LOCKDELAY=8
USCRONTAB_STOPEC=101
@ -283,14 +299,17 @@ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \
-A,--add,--install action=install \
-R,--remove,--uninstall action=uninstall \
-e,--edit action=edit \
-a,--add action=add \
-r,--remove action=remove \
-l,--list action=list \
-n,--fake fake=1 \
--lock: lockfile= \
--lockdelay: lockdelay= \
-n,--fake fake=1 \
-c,--continuous continuous=1 \
-k:,--stop: USCRONTAB_STOPEC= \
-l,--list action=list \
-e,--edit action=edit \
-r,--remove action=remove \
--show-ctnow action=show-ctnow \
--force-ctnow: __CTRESOLVE_CTNOW= \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
crontab="$1"; shift
@ -306,12 +325,15 @@ if [ "$action" == "edit" ]; then
touch "$crontab" || die
chmod 640 "$crontab"
fi
"${EDITOR:-vi}" "$crontab"
"${EDITOR:-vi}" "$crontab" || die
exit 0
elif [ "$action" == "add" ]; then
ewarn "XXX non implémenté"
exit 0
elif [ "$action" == "remove" ]; then
[ -n "$crontab" ] && ewarn "$crontab: cet argument a été ignoré"
crontab="$USCRONTAB_USERFILE"
crontab="$(get_usercrontab "$crontab")"
if [ -f "$crontab" ]; then
ask_yesno "Voulez-vous supprimer le fichier $crontab?" C || die
enote "Suppression de $crontab"
@ -347,6 +369,10 @@ elif [ "$action" == "list" ]; then
cat "$ctfile"
done
exit $r
elif [ "$action" == "show-ctnow" ]; then
ctnow
exit 0
fi
[ -z "$crontab" -o -f "$crontab" ] || die "$crontab: fichier introuvable"