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"
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

View File

@ -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"