From acb281dac6ed8f3eabc2c472b9536a6525aa9d21 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Wed, 20 Aug 2014 09:35:45 +0400 Subject: [PATCH] =?UTF-8?q?impl=C3=A9menter=20--show-ctnow,=20--force-ctno?= =?UTF-8?q?w=20et=20-r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- uscrontab | 54 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/uscrontab b/uscrontab index 21aefac..7f5d30a 100755 --- a/uscrontab +++ b/uscrontab @@ -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"