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), utilisé. Si name est vide ou vaut \$USER (soit $USER en l'occurence),
copier le fichier spécifié vers le chemin $USCRONTAB_USERFILE copier le fichier spécifié vers le chemin $USCRONTAB_USERFILE
Sinon, copier le fichier spécifié vers $USCRONTAB_USERDIR/name 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 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 script à supprimer. Si l'argument n'est pas spécifié ou vaut \$USER
(soit $USER en l'occurence), supprimer le fichier $USCRONTAB_USERFILE (soit $USER en l'occurence), supprimer le fichier $USCRONTAB_USERFILE
@ -223,11 +223,6 @@ OPTIONS
$USCRONTAB_USERDIR $USCRONTAB_USERDIR
-n, --fake -n, --fake
Afficher au lieu de les exécuter les commandes qui doivent être lancées 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 OPTIONS AVANCEES
--lock LOCKFILE --lock LOCKFILE
@ -253,7 +248,16 @@ OPTIONS AVANCEES
de faire des tests par exemple sur l'environnement avant de lancer les 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 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 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() { function set_usercrontabs() {
@ -266,6 +270,18 @@ function set_usercrontabs() {
eval "${1:-usercrontabs}"'=("${_userfile[@]}" "${_userdir[@]}")' 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_CTLINE="* * * * * $script"
USCRONTAB_LOCKDELAY=8 USCRONTAB_LOCKDELAY=8
USCRONTAB_STOPEC=101 USCRONTAB_STOPEC=101
@ -283,14 +299,17 @@ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-A,--add,--install action=install \ -A,--add,--install action=install \
-R,--remove,--uninstall action=uninstall \ -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= \ --lock: lockfile= \
--lockdelay: lockdelay= \ --lockdelay: lockdelay= \
-n,--fake fake=1 \
-c,--continuous continuous=1 \ -c,--continuous continuous=1 \
-k:,--stop: USCRONTAB_STOPEC= \ -k:,--stop: USCRONTAB_STOPEC= \
-l,--list action=list \ --show-ctnow action=show-ctnow \
-e,--edit action=edit \ --force-ctnow: __CTRESOLVE_CTNOW= \
-r,--remove action=remove \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
crontab="$1"; shift crontab="$1"; shift
@ -306,12 +325,15 @@ if [ "$action" == "edit" ]; then
touch "$crontab" || die touch "$crontab" || die
chmod 640 "$crontab" chmod 640 "$crontab"
fi fi
"${EDITOR:-vi}" "$crontab" "${EDITOR:-vi}" "$crontab" || die
exit 0
elif [ "$action" == "add" ]; then
ewarn "XXX non implémenté"
exit 0 exit 0
elif [ "$action" == "remove" ]; then elif [ "$action" == "remove" ]; then
[ -n "$crontab" ] && ewarn "$crontab: cet argument a été ignoré" crontab="$(get_usercrontab "$crontab")"
crontab="$USCRONTAB_USERFILE"
if [ -f "$crontab" ]; then if [ -f "$crontab" ]; then
ask_yesno "Voulez-vous supprimer le fichier $crontab?" C || die ask_yesno "Voulez-vous supprimer le fichier $crontab?" C || die
enote "Suppression de $crontab" enote "Suppression de $crontab"
@ -347,6 +369,10 @@ elif [ "$action" == "list" ]; then
cat "$ctfile" cat "$ctfile"
done done
exit $r exit $r
elif [ "$action" == "show-ctnow" ]; then
ctnow
exit 0
fi fi
[ -z "$crontab" -o -f "$crontab" ] || die "$crontab: fichier introuvable" [ -z "$crontab" -o -f "$crontab" ] || die "$crontab: fichier introuvable"