diff --git a/lib/uinst/rootconf b/lib/uinst/rootconf index 3f4858c..4ce7812 100644 --- a/lib/uinst/rootconf +++ b/lib/uinst/rootconf @@ -74,11 +74,12 @@ etitle "Installation de /etc/init.d/openvz-fix-etchosts" \ "$scriptdir/../init.d/install-openvz-fix-etchosts" etitle "Installation des répertoires pour uscrontab" -if mkdir -p /var/uscrontab/crontabs; then - chmod 1733 /var/uscrontab/crontabs -else - eerror "Impossible de créer le répertoire /var/uscrontab/crontabs" -fi +mkdir -p /var/uscrontab/users && +chmod 1733 /var/uscrontab/users || +eerror "Impossible de créer le répertoire /var/uscrontab/users" +mkdir -p /var/uscrontab/users.d && +chmod 1733 /var/uscrontab/users.d || +eerror "Impossible de créer le répertoire /var/uscrontab/users.d" eend exit 0 diff --git a/uscrontab b/uscrontab index 7f5d30a..25f6025 100755 --- a/uscrontab +++ b/uscrontab @@ -1,7 +1,7 @@ #!/bin/bash # -*- 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 -urequire DEFAULTS crontab +urequire DEFAULTS crontab install function display_help() { 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 -a, --add XXX non implémenté 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 utilisé. Si name est vide ou vaut \$USER (soit $USER en l'occurence), copier le fichier spécifié vers le chemin $USCRONTAB_USERFILE @@ -286,8 +286,8 @@ USCRONTAB_CTLINE="* * * * * $script" USCRONTAB_LOCKDELAY=8 USCRONTAB_STOPEC=101 USCRONTAB_BASEDIR=/var/uscrontab -USCRONTAB_USERFILE="$USCRONTAB_BASEDIR/crontabs/$USER" -USCRONTAB_USERDIR="$USCRONTAB_BASEDIR/$USER.d" +USCRONTAB_USERFILE="$USCRONTAB_BASEDIR/users/$USER" +USCRONTAB_USERDIR="$USCRONTAB_BASEDIR/users.d/$USER" USCRONTAB_USER="$USCRONTAB_BASEDIR/$USER" action=run @@ -312,42 +312,51 @@ parse_opts "${PRETTYOPTS[@]}" \ --force-ctnow: __CTRESOLVE_CTNOW= \ @ args -- "$@" && set -- "${args[@]}" || die "$args" -crontab="$1"; shift +uscrontab="$1"; shift if [ "$action" == "edit" ]; then - if [ -z "$crontab" ]; then + if [ -z "$uscrontab" ]; then basedir="$(dirname "$USCRONTAB_USERFILE")" [ -d "$basedir" ] || die "$basedir: ce répertoire n'existe pas. Vérifiez l'installation de nutools" - crontab="$USCRONTAB_USERFILE" + uscrontab="$USCRONTAB_USERFILE" fi - enote "Edition de $crontab" - if [ ! -f "$crontab" ]; then - touch "$crontab" || die - chmod 640 "$crontab" + enote "Edition de $uscrontab" + if [ ! -f "$uscrontab" ]; then + touch "$uscrontab" || die + chmod 640 "$uscrontab" fi - "${EDITOR:-vi}" "$crontab" || die + "${EDITOR:-vi}" "$uscrontab" || die exit 0 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 elif [ "$action" == "remove" ]; then - crontab="$(get_usercrontab "$crontab")" - if [ -f "$crontab" ]; then - ask_yesno "Voulez-vous supprimer le fichier $crontab?" C || die - enote "Suppression de $crontab" - rm "$crontab" || die + uscrontab="$(get_usercrontab "$uscrontab")" + if [ -f "$uscrontab" ]; then + ask_yesno "Voulez-vous supprimer le fichier $uscrontab?" C || die + enote "Suppression de $uscrontab" + rm "$uscrontab" || die fi exit 0 elif [ "$action" == "list" ]; then - if [ -n "$crontab" ]; then - crontab="$(abspath "$crontab")" - array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" crontab="$crontab" '$6 == script && $7 == crontab { print $7 }')" + if [ -n "$uscrontab" ]; then + uscrontab="$(abspath "$uscrontab")" + 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 - ewarn "$(ppath "$crontab"): non planifié" - ctfiles=("$crontab") + ewarn "$(ppath "$uscrontab"): non planifié" + ctfiles=("$uscrontab") fi else 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 fi -[ -z "$crontab" -o -f "$crontab" ] || die "$crontab: fichier introuvable" -[ -n "$crontab" ] && crontab="$(abspath "$crontab")" +[ -z "$uscrontab" -o -f "$uscrontab" ] || die "$uscrontab: fichier introuvable" +[ -n "$uscrontab" ] && uscrontab="$(abspath "$uscrontab")" if [ "$action" == "install" ]; then 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" elif [ "$action" == "uninstall" ]; then 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" elif [ "$action" == "run" ]; then - if [ -n "$crontab" ]; then - default_lockfile="/var/run/$scriptname$crontab.lock" + if [ -n "$uscrontab" ]; then + default_lockfile="/var/run/$scriptname$uscrontab.lock" else set_usercrontabs usercrontabs - ac_set_tmpfile crontab + ac_set_tmpfile uscrontab for usercrontab in "${usercrontabs[@]}"; do - echo "# $usercrontab" >>"$crontab" - cat "$usercrontab" >>"$crontab" + echo "# $usercrontab" >>"$uscrontab" + cat "$usercrontab" >>"$uscrontab" done default_lockfile="/var/run/$scriptname$USCRONTAB_USER.lock" fi @@ -423,7 +432,7 @@ elif [ "$action" == "run" ]; then exit 0 ;; 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" if [ -f "$lockwarn" ]; then edebug "$msg" @@ -473,7 +482,7 @@ elif [ "$action" == "run" ]; then die "$*" } - __ctscript="$(ctresolve <"$crontab")" + __ctscript="$(ctresolve <"$uscrontab")" ec=0 edebug "$__ctscript" ( @@ -530,7 +539,7 @@ puis supprimez le cas échéant le fichier $pidfile" ac_cleanall ); ec=$? - ac_clean "$crontab" + ac_clean "$uscrontab" ac_clean "$lockfile" exit "$ec"