implémenter l'option -a
changer les répertoires renommer crontab en uscrontab dans le source
This commit is contained in:
parent
acb281dac6
commit
c612c3c5a1
|
@ -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
|
||||||
|
|
79
uscrontab
79
uscrontab
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue