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
et chacun des fichiers du répertoire
$USCRONTAB_USERDIR
-N, --nop
Ne pas examiner la planification. Traiter uniquement l'option --osvar le
cas échéant.
-n, --fake
Afficher au lieu de les exécuter les commandes qui doivent être lancées
-P, --pause-for NBMINS
@ -248,6 +251,9 @@ OPTIONS
-f, --force
Forcer l'exécution de la planification, même si elle a été mise en 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
--lock LOCKFILE
@ -356,6 +362,7 @@ continuous=
force_ctnow=
pause=
force=
osvars=()
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \
-A,--add,--install action=install \
@ -365,11 +372,13 @@ parse_opts "${PRETTYOPTS[@]}" \
-a,--add action=add \
-r,--remove action=remove \
-l,--list action=list \
-N,--nop action=nop \
-n,--fake fake=1 \
-P:,--pause-for: '$action=pause; set@ pause' \
-p,--pause action=pause \
-Y,--unpause action=unpause \
-f,--force force=1 \
-v:,--osvar: osvars \
--lock: lockfile= \
--lockdelay: lockdelay= \
-c,--continuous continuous=1 \
@ -382,11 +391,31 @@ parse_opts "${PRETTYOPTS[@]}" \
-G,--any-ctnow __CTRESOLVE_CTNOW="**ANY**" \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
uscrontab="$1"; shift
pausefile="$USCRONTAB_USERFILE.pauseuntil"
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
[ -n "$pause" ] || pause=1440
if [ "$pause" -lt 0 ]; then
@ -489,6 +518,9 @@ elif [ "$action" == "list" ]; then
elif [ "$action" == "show-ctnow" ]; then
ctnow "$now"
exit 0
elif [ "$action" == "nop" ]; then
exit 0
fi
[ -z "$uscrontab" -o -f "$uscrontab" ] || die "$uscrontab: fichier introuvable"
@ -581,7 +613,7 @@ elif [ "$action" == "run" ]; then
local cmd
cmd="${1%% *}"
case "$cmd" in
check_pidfile|remove_pidfile|elogto) return 1;;
check_pidfile|remove_pidfile|osvar|elogto) return 1;;
esac
return 0
}
@ -675,6 +707,17 @@ puis supprimez le cas échéant le fichier $pidfile"
array_del __USCRONTAB_PIDFILES "$pidfile"
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
# Si des variables sont spécifiées, les initialiser avant de lancer le