uscrontab: support des oneshot vars

This commit is contained in:
Jephté Clain 2017-09-21 02:09:05 +04:00
parent a66c0c231f
commit cf629e62e1
1 changed files with 46 additions and 3 deletions

View File

@ -234,6 +234,9 @@ OPTIONS
$USCRONTAB_USERFILE $USCRONTAB_USERFILE
et chacun des fichiers du répertoire et chacun des fichiers du répertoire
$USCRONTAB_USERDIR $USCRONTAB_USERDIR
-N, --nop
Ne pas examiner la planification. Traiter uniquement l'option --osvar le
cas échéant.
-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
-P, --pause-for NBMINS -P, --pause-for NBMINS
@ -248,6 +251,9 @@ OPTIONS
-f, --force -f, --force
Forcer l'exécution de la planification, même si elle a été mise en pause Forcer l'exécution de la planification, même si elle a été mise en pause
avec l'option --pause avec l'option --pause
-v, --osvar NAME[=VALUE]
Définir une variable de type oneshot. Par défaut, VALUE vaut 1 si elle
n'est pas spécifiée.
OPTIONS AVANCEES OPTIONS AVANCEES
--lock LOCKFILE --lock LOCKFILE
@ -356,6 +362,7 @@ continuous=
force_ctnow= force_ctnow=
pause= pause=
force= force=
osvars=()
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-A,--add,--install action=install \ -A,--add,--install action=install \
@ -365,11 +372,13 @@ parse_opts "${PRETTYOPTS[@]}" \
-a,--add action=add \ -a,--add action=add \
-r,--remove action=remove \ -r,--remove action=remove \
-l,--list action=list \ -l,--list action=list \
-N,--nop action=nop \
-n,--fake fake=1 \ -n,--fake fake=1 \
-P:,--pause-for: '$action=pause; set@ pause' \ -P:,--pause-for: '$action=pause; set@ pause' \
-p,--pause action=pause \ -p,--pause action=pause \
-Y,--unpause action=unpause \ -Y,--unpause action=unpause \
-f,--force force=1 \ -f,--force force=1 \
-v:,--osvar: osvars \
--lock: lockfile= \ --lock: lockfile= \
--lockdelay: lockdelay= \ --lockdelay: lockdelay= \
-c,--continuous continuous=1 \ -c,--continuous continuous=1 \
@ -382,11 +391,31 @@ parse_opts "${PRETTYOPTS[@]}" \
-G,--any-ctnow __CTRESOLVE_CTNOW="**ANY**" \ -G,--any-ctnow __CTRESOLVE_CTNOW="**ANY**" \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
uscrontab="$1"; shift
pausefile="$USCRONTAB_USERFILE.pauseuntil" pausefile="$USCRONTAB_USERFILE.pauseuntil"
now="$(awk 'BEGIN { print int(systime() / 60) * 60 }')" now="$(awk 'BEGIN { print int(systime() / 60) * 60 }')"
# ne prendre le premier argument comme un fichier que s'il existe ou s'il n'est
# pas de la forme *=*
if [[ "$1" == *=* ]]; then
if [ -f "$1" ]; then
uscrontab="$1"; shift
fi
else
uscrontab="$1"; shift
fi
# écrire les variables oneshot
for osvar in "${osvars[@]}"; do
if [[ "$osvar" == *=* ]]; then
splitvar "$osvar" name value
else
name="$osvar"
value=1
fi
name="${name##*/}" # au cas où...
echo -n "$value" >"$USCRONTAB_USERFILE.$name.osvar"
done
if [ "$action" == "pause" ]; then if [ "$action" == "pause" ]; then
[ -n "$pause" ] || pause=1440 [ -n "$pause" ] || pause=1440
if [ "$pause" -lt 0 ]; then if [ "$pause" -lt 0 ]; then
@ -489,6 +518,9 @@ elif [ "$action" == "list" ]; then
elif [ "$action" == "show-ctnow" ]; then elif [ "$action" == "show-ctnow" ]; then
ctnow "$now" ctnow "$now"
exit 0 exit 0
elif [ "$action" == "nop" ]; then
exit 0
fi fi
[ -z "$uscrontab" -o -f "$uscrontab" ] || die "$uscrontab: fichier introuvable" [ -z "$uscrontab" -o -f "$uscrontab" ] || die "$uscrontab: fichier introuvable"
@ -581,7 +613,7 @@ elif [ "$action" == "run" ]; then
local cmd local cmd
cmd="${1%% *}" cmd="${1%% *}"
case "$cmd" in case "$cmd" in
check_pidfile|remove_pidfile|elogto) return 1;; check_pidfile|remove_pidfile|osvar|elogto) return 1;;
esac esac
return 0 return 0
} }
@ -675,6 +707,17 @@ puis supprimez le cas échéant le fichier $pidfile"
array_del __USCRONTAB_PIDFILES "$pidfile" array_del __USCRONTAB_PIDFILES "$pidfile"
fi fi
} }
function osvar() {
local __name __value
for __name in "$@"; do
splitvar "$__name" __name __value
if [ -f "$USCRONTAB_USERFILE.$__name.osvar" ]; then
__value="$(<"$USCRONTAB_USERFILE.$__name.osvar")"
rm "$USCRONTAB_USERFILE.$__name.osvar"
fi
_setv "$__name" "$__value"
done
}
__ac_forgetall __ac_forgetall
# Si des variables sont spécifiées, les initialiser avant de lancer le # Si des variables sont spécifiées, les initialiser avant de lancer le