diff --git a/urunserial b/uscrontab similarity index 76% rename from urunserial rename to uscrontab index b079deb..b8085b1 100755 --- a/urunserial +++ b/uscrontab @@ -6,19 +6,22 @@ function display_help() { USAGE $scriptname [options] /path/to/crontab + $scriptname -l [/path/to/crontab] -Ce script doit normalement être lancé toutes les minutes par une tâche cron. A -chaque lancement, il examine quels scripts doivent être exécutés dans le fichier -crontab spécifié. Ce fichier est composé de lignes d'une des formes suivantes, -qui sont analysées et traitées dans l'ordre: +La première forme du script doit normalement être lancé toutes les minutes par +une tâche cron. Utiliser l'option --install pour ajouter automatique la ligne +dans la crontab de l'utilisateur. + +A chaque lancement du script, il examine quels scripts doivent être exécutés +dans le fichier crontab spécifié. Ce fichier est composé de lignes d'une des +formes suivantes, qui sont analysées et traitées dans l'ordre: # commentaire ignoré var=\"initialiser une variable\" minutes hours days months dows command [args] Quelles que soient les lignes qui sont sélectionnées pour le lancement, elles -sont garanties de s'exécuter sériellement dans l'ordre du fichier, d'où le nom -de ce script. +sont garanties de s'exécuter dans l'ordre du fichier, l'une après l'autre. Certaines extensions par rapport à la syntaxe de crontab sont autorisées. Il est en particulier possible de spécifier plusieurs planifications pour une seule @@ -39,12 +42,22 @@ enlèvent /opt/rogue au PATH: OPTIONS - --install + -A, --install Installer une planification toutes les minutes de ce script dans la - crontab de l'utilisateur. - --uninstall + crontab de l'utilisateur. L'argument /path/to/crontab est requis. + -R, --uninstall Désinstaller la planification toutes les minutes de ce script du crontab - de l'utilisateur. + de l'utilisateur. L'argument /path/to/crontab est requis, et seule cette + instance est désinstallée le cas échéant. + -l, --list + Lister les contenus des fichiers crontab dont l'exécution a été + planifiée avec --install + Si /path/to/crontab est spécifié, ne lister le contenu de ce fichier que + si et seulement si son exécution a été planifiée. + -n, --fake + Afficher au lieu de les exécuter les commandes qui doivent être lancées + +OPTIONS AVANCEES --lock LOCKFILE Inscrire dans le fichier spécifié des informations permettant d'éviter les invocations simultanées de ce script. Si selon ce fichier, le script @@ -58,8 +71,6 @@ OPTIONS --lockdelay LOCKDELAY[=$LOCKDELAY] Changer le nombre d'heures pendant lesquelles on autorise le script a verrouiller l'exécution avant d'afficher un avertissement. - -n, --fake - Afficher au lieu de les exécuter les commandes qui doivent être lancées -c, --continuous Par défaut, ce script s'arrête à la première commande qui retourne avec une code d'erreur. Avec cette option, ce script ne s'arrête jamais, bien @@ -88,15 +99,36 @@ continuous= stopec=101 parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ - --add,--install action=install \ - --remove,--uninstall action=uninstall \ + -A,--add,--install action=install \ + -R,--remove,--uninstall action=uninstall \ --lock: lockfile= \ --lockdelay: lockdelay= \ -n,--fake fake=1 \ -c,--continuous continuous=1 \ -k:,--stop: stopec=1 \ + -l,--list action=list \ @ args -- "$@" && set -- "${args[@]}" || die "$args" +if [ "$action" == "list" ]; then + crontab="$1"; shift + [ -n "$crontab" ] && crontab="$(abspath "$crontab")" + + array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" '$6 == script { print $7 }')" + found= + for ctfile in "${ctfiles[@]}"; do + if [ -z "$crontab" -o "$ctfile" == "$crontab" ]; then + found=1 + etitle "$(ppath "$ctfile")" + cat "$ctfile" + eend + fi + done + if [ -n "$crontab" -a -z "$found" ]; then + ewarn "$(ppath "$crontab"): non planifié" + fi + exit 0 +fi + crontab="$1"; shift [ -n "$crontab" ] || die_with "Vous devez spécifier le fichier crontab" display_help [ -f "$crontab" ] || die "$crontab: fichier introuvable"