implémenter l'option -a

changer les répertoires
renommer crontab en uscrontab dans le source
This commit is contained in:
Jephté Clain 2014-08-20 17:02:40 +04:00
parent acb281dac6
commit c612c3c5a1
2 changed files with 50 additions and 40 deletions

View File

@ -74,11 +74,12 @@ etitle "Installation de /etc/init.d/openvz-fix-etchosts" \
"$scriptdir/../init.d/install-openvz-fix-etchosts" "$scriptdir/../init.d/install-openvz-fix-etchosts"
etitle "Installation des répertoires pour uscrontab" etitle "Installation des répertoires pour uscrontab"
if mkdir -p /var/uscrontab/crontabs; then mkdir -p /var/uscrontab/users &&
chmod 1733 /var/uscrontab/crontabs chmod 1733 /var/uscrontab/users ||
else eerror "Impossible de créer le répertoire /var/uscrontab/users"
eerror "Impossible de créer le répertoire /var/uscrontab/crontabs" mkdir -p /var/uscrontab/users.d &&
fi chmod 1733 /var/uscrontab/users.d ||
eerror "Impossible de créer le répertoire /var/uscrontab/users.d"
eend eend
exit 0 exit 0

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname "$0")/lib/ulib/ulib" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS crontab urequire DEFAULTS crontab install
function display_help() { function display_help() {
uecho "$scriptname: lancer une suite de commande en respectant une planification de type cron uecho "$scriptname: lancer une suite de commande en respectant une planification de type cron
@ -202,7 +202,7 @@ OPTIONS
n'est spécifié, éditer $USCRONTAB_USERFILE n'est spécifié, éditer $USCRONTAB_USERFILE
-a, --add XXX non implémenté -a, --add XXX non implémenté
Installer un script uscrontab dans le répertoire approprié. L'argument Installer un script uscrontab dans le répertoire approprié. L'argument
doit être de la forme [[name:]/path/to/uscrontab] doit être de la forme [name:]/path/to/uscrontab
Si name n'est pas spécifié, le nom de base du fichier spécifié est Si name n'est pas spécifié, le nom de base du fichier spécifié est
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
@ -286,8 +286,8 @@ USCRONTAB_CTLINE="* * * * * $script"
USCRONTAB_LOCKDELAY=8 USCRONTAB_LOCKDELAY=8
USCRONTAB_STOPEC=101 USCRONTAB_STOPEC=101
USCRONTAB_BASEDIR=/var/uscrontab USCRONTAB_BASEDIR=/var/uscrontab
USCRONTAB_USERFILE="$USCRONTAB_BASEDIR/crontabs/$USER" USCRONTAB_USERFILE="$USCRONTAB_BASEDIR/users/$USER"
USCRONTAB_USERDIR="$USCRONTAB_BASEDIR/$USER.d" USCRONTAB_USERDIR="$USCRONTAB_BASEDIR/users.d/$USER"
USCRONTAB_USER="$USCRONTAB_BASEDIR/$USER" USCRONTAB_USER="$USCRONTAB_BASEDIR/$USER"
action=run action=run
@ -312,42 +312,51 @@ parse_opts "${PRETTYOPTS[@]}" \
--force-ctnow: __CTRESOLVE_CTNOW= \ --force-ctnow: __CTRESOLVE_CTNOW= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
crontab="$1"; shift uscrontab="$1"; shift
if [ "$action" == "edit" ]; then if [ "$action" == "edit" ]; then
if [ -z "$crontab" ]; then if [ -z "$uscrontab" ]; then
basedir="$(dirname "$USCRONTAB_USERFILE")" basedir="$(dirname "$USCRONTAB_USERFILE")"
[ -d "$basedir" ] || die "$basedir: ce répertoire n'existe pas. Vérifiez l'installation de nutools" [ -d "$basedir" ] || die "$basedir: ce répertoire n'existe pas. Vérifiez l'installation de nutools"
crontab="$USCRONTAB_USERFILE" uscrontab="$USCRONTAB_USERFILE"
fi fi
enote "Edition de $crontab" enote "Edition de $uscrontab"
if [ ! -f "$crontab" ]; then if [ ! -f "$uscrontab" ]; then
touch "$crontab" || die touch "$uscrontab" || die
chmod 640 "$crontab" chmod 640 "$uscrontab"
fi fi
"${EDITOR:-vi}" "$crontab" || die "${EDITOR:-vi}" "$uscrontab" || die
exit 0 exit 0
elif [ "$action" == "add" ]; then elif [ "$action" == "add" ]; then
ewarn "XXX non implémenté" [ -n "$uscrontab" ] || die "Vous devez spécifier le fichier à installer"
if [[ "$uscrontab" == *:* ]]; then
splitfsep2 "$uscrontab" : name uscrontab
[ -f "$uscrontab" ] || die "$uscrontab: fichier introuvable"
else
name="$(basename "$uscrontab")"
fi
dest="$(get_usercrontab "$name")"
copy_update_ask "$uscrontab" "$dest"
exit 0 exit 0
elif [ "$action" == "remove" ]; then elif [ "$action" == "remove" ]; then
crontab="$(get_usercrontab "$crontab")" uscrontab="$(get_usercrontab "$uscrontab")"
if [ -f "$crontab" ]; then if [ -f "$uscrontab" ]; then
ask_yesno "Voulez-vous supprimer le fichier $crontab?" C || die ask_yesno "Voulez-vous supprimer le fichier $uscrontab?" C || die
enote "Suppression de $crontab" enote "Suppression de $uscrontab"
rm "$crontab" || die rm "$uscrontab" || die
fi fi
exit 0 exit 0
elif [ "$action" == "list" ]; then elif [ "$action" == "list" ]; then
if [ -n "$crontab" ]; then if [ -n "$uscrontab" ]; then
crontab="$(abspath "$crontab")" uscrontab="$(abspath "$uscrontab")"
array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" crontab="$crontab" '$6 == script && $7 == crontab { print $7 }')" array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" uscrontab="$uscrontab" '$6 == script && $7 == uscrontab { print $7 }')"
if [ ${#ctfiles[*]} -eq 0 ]; then if [ ${#ctfiles[*]} -eq 0 ]; then
ewarn "$(ppath "$crontab"): non planifié" ewarn "$(ppath "$uscrontab"): non planifié"
ctfiles=("$crontab") ctfiles=("$uscrontab")
fi fi
else else
array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" '$6 == script { if ($7) print $7; else print "GENERIC" }')" array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" '$6 == script { if ($7) print $7; else print "GENERIC" }')"
@ -375,28 +384,28 @@ elif [ "$action" == "show-ctnow" ]; then
exit 0 exit 0
fi fi
[ -z "$crontab" -o -f "$crontab" ] || die "$crontab: fichier introuvable" [ -z "$uscrontab" -o -f "$uscrontab" ] || die "$uscrontab: fichier introuvable"
[ -n "$crontab" ] && crontab="$(abspath "$crontab")" [ -n "$uscrontab" ] && uscrontab="$(abspath "$uscrontab")"
if [ "$action" == "install" ]; then if [ "$action" == "install" ]; then
ctline="$USCRONTAB_CTLINE" ctline="$USCRONTAB_CTLINE"
[ -n "$crontab" ] && ctline="$ctline $(quoted_arg "$crontab")" [ -n "$uscrontab" ] && ctline="$ctline $(quoted_arg "$uscrontab")"
enable_in_crontab "$ctline" && estep "add_to_crontab $ctline" enable_in_crontab "$ctline" && estep "add_to_crontab $ctline"
elif [ "$action" == "uninstall" ]; then elif [ "$action" == "uninstall" ]; then
ctline="$USCRONTAB_CTLINE" ctline="$USCRONTAB_CTLINE"
[ -n "$crontab" ] && ctline="$ctline $(quoted_arg "$crontab")" [ -n "$uscrontab" ] && ctline="$ctline $(quoted_arg "$uscrontab")"
remove_from_crontab "$ctline" && estep "remove_from_crontab $ctline" remove_from_crontab "$ctline" && estep "remove_from_crontab $ctline"
elif [ "$action" == "run" ]; then elif [ "$action" == "run" ]; then
if [ -n "$crontab" ]; then if [ -n "$uscrontab" ]; then
default_lockfile="/var/run/$scriptname$crontab.lock" default_lockfile="/var/run/$scriptname$uscrontab.lock"
else else
set_usercrontabs usercrontabs set_usercrontabs usercrontabs
ac_set_tmpfile crontab ac_set_tmpfile uscrontab
for usercrontab in "${usercrontabs[@]}"; do for usercrontab in "${usercrontabs[@]}"; do
echo "# $usercrontab" >>"$crontab" echo "# $usercrontab" >>"$uscrontab"
cat "$usercrontab" >>"$crontab" cat "$usercrontab" >>"$uscrontab"
done done
default_lockfile="/var/run/$scriptname$USCRONTAB_USER.lock" default_lockfile="/var/run/$scriptname$USCRONTAB_USER.lock"
fi fi
@ -423,7 +432,7 @@ elif [ "$action" == "run" ]; then
exit 0 exit 0
;; ;;
stale) stale)
msg="Un verrou sur '$scriptname $crontab' est posé depuis plus de $lockdelay heures. Veuillez faire vos vérification et supprimer le cas échéant le fichier $lockfile" msg="Un verrou sur '$scriptname $uscrontab' est posé depuis plus de $lockdelay heures. Veuillez faire vos vérification et supprimer le cas échéant le fichier $lockfile"
logger -p cron.warn -t "$scriptname" -- "$msg" logger -p cron.warn -t "$scriptname" -- "$msg"
if [ -f "$lockwarn" ]; then if [ -f "$lockwarn" ]; then
edebug "$msg" edebug "$msg"
@ -473,7 +482,7 @@ elif [ "$action" == "run" ]; then
die "$*" die "$*"
} }
__ctscript="$(ctresolve <"$crontab")" __ctscript="$(ctresolve <"$uscrontab")"
ec=0 ec=0
edebug "$__ctscript" edebug "$__ctscript"
( (
@ -530,7 +539,7 @@ puis supprimez le cas échéant le fichier $pidfile"
ac_cleanall ac_cleanall
); ec=$? ); ec=$?
ac_clean "$crontab" ac_clean "$uscrontab"
ac_clean "$lockfile" ac_clean "$lockfile"
exit "$ec" exit "$ec"