parent
8d37156375
commit
d70809b9eb
115
uscrontab
115
uscrontab
|
@ -177,11 +177,15 @@ OPTIONS
|
||||||
-e, --edit
|
-e, --edit
|
||||||
Lancer un editeur pour modifier la crontab spécifiée. Si aucun fichier
|
Lancer un editeur pour modifier la crontab spécifiée. Si aucun fichier
|
||||||
n'est spécifié, éditer $USCRONTAB_USERFILE
|
n'est spécifié, éditer $USCRONTAB_USERFILE
|
||||||
|
-r, --remove
|
||||||
|
Supprimer le fichier $USCRONTAB_USERFILE s'il existe
|
||||||
|
Si l'argument /path/to/crontab est spécifié, il est ignoré.
|
||||||
-l, --list
|
-l, --list
|
||||||
Si l'argument /path/to/crontab est spécifié, afficher le contenu de ce
|
Si l'argument /path/to/crontab est spécifié, afficher le contenu de ce
|
||||||
fichier. Sinon, lister les contenus des fichiers crontab qui sont
|
fichier. Sinon, lister les contenus des fichiers crontab qui sont
|
||||||
exécutés avec la planification actuelle. Si une planification générique
|
exécutés avec la planification actuelle. Si une planification générique
|
||||||
est installée, afficher le contenu du fichier
|
est installée, ou si aucune planification n'est en cours, afficher le
|
||||||
|
contenu du fichier
|
||||||
$USCRONTAB_USERFILE
|
$USCRONTAB_USERFILE
|
||||||
et chacun des fichiers du répertoire
|
et chacun des fichiers du répertoire
|
||||||
$USCRONTAB_USERDIR
|
$USCRONTAB_USERDIR
|
||||||
|
@ -215,6 +219,16 @@ OPTIONS AVANCEES
|
||||||
le traitement."
|
le traitement."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function set_usercrontabs() {
|
||||||
|
# initialiser le tableau $1(=usercrontabs) avec la liste suivante: le
|
||||||
|
# fichier $USCRONTAB_USERFILE s'il existe, puis la liste des fichiers dans
|
||||||
|
# le répertoire $USCRONTAB_USERDIR
|
||||||
|
local -a _userfile _userdir
|
||||||
|
[ -f "$USCRONTAB_USERFILE" ] && _userfile=("$USCRONTAB_USERFILE")
|
||||||
|
array_lsfiles _userdir "$USCRONTAB_USERDIR"
|
||||||
|
eval "${1:-usercrontabs}"'=("${_userfile[@]}" "${_userdir[@]}")'
|
||||||
|
}
|
||||||
|
|
||||||
USCRONTAB_CTLINE="* * * * * $script"
|
USCRONTAB_CTLINE="* * * * * $script"
|
||||||
USCRONTAB_LOCKDELAY=8
|
USCRONTAB_LOCKDELAY=8
|
||||||
USCRONTAB_STOPEC=101
|
USCRONTAB_STOPEC=101
|
||||||
|
@ -238,43 +252,93 @@ parse_opts "${PRETTYOPTS[@]}" \
|
||||||
-c,--continuous continuous=1 \
|
-c,--continuous continuous=1 \
|
||||||
-k:,--stop: USCRONTAB_STOPEC= \
|
-k:,--stop: USCRONTAB_STOPEC= \
|
||||||
-l,--list action=list \
|
-l,--list action=list \
|
||||||
|
-e,--edit action=edit \
|
||||||
|
-r,--remove action=remove \
|
||||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
if [ "$action" == "list" ]; then
|
crontab="$1"; shift
|
||||||
crontab="$1"; shift
|
|
||||||
[ -n "$crontab" ] && crontab="$(abspath "$crontab")"
|
|
||||||
|
|
||||||
array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" '$6 == script { print $7 }')"
|
if [ "$action" == "edit" ]; then
|
||||||
found=
|
if [ -z "$crontab" ]; then
|
||||||
for ctfile in "${ctfiles[@]}"; do
|
basedir="$(dirname "$USCRONTAB_USERFILE")"
|
||||||
if [ -z "$crontab" -o "$ctfile" == "$crontab" ]; then
|
[ -d "$basedir" ] || die "$basedir: ce répertoire n'existe pas. Vérifiez l'installation de nutools"
|
||||||
found=1
|
crontab="$USCRONTAB_USERFILE"
|
||||||
etitle "$(ppath "$ctfile")"
|
|
||||||
cat "$ctfile"
|
|
||||||
eend
|
|
||||||
fi
|
fi
|
||||||
done
|
enote "Edition de $crontab"
|
||||||
if [ -n "$crontab" -a -z "$found" ]; then
|
"${EDITOR:-vi}" "$crontab"
|
||||||
ewarn "$(ppath "$crontab"): non planifié"
|
exit 0
|
||||||
|
|
||||||
|
elif [ "$action" == "remove" ]; then
|
||||||
|
[ -n "$crontab" ] && ewarn "$crontab: cet argument a été ignoré"
|
||||||
|
crontab="$USCRONTAB_USERFILE"
|
||||||
|
if [ -f "$crontab" ]; then
|
||||||
|
ask_yesno "Voulez-vous supprimer le fichier $crontab?" C || die
|
||||||
|
enote "Suppression de $crontab"
|
||||||
|
rm "$crontab" || die
|
||||||
fi
|
fi
|
||||||
exit 0
|
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 [ ${#ctfiles[*]} -eq 0 ]; then
|
||||||
|
ewarn "$(ppath "$crontab"): non planifié"
|
||||||
|
ctfiles=("$crontab")
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
array_from_xlines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" '$6 == script { print $7 }')"
|
||||||
|
if array_contains ctfiles ""; then
|
||||||
|
# il y a une planification générique
|
||||||
|
array_del ctfiles ""
|
||||||
|
set_usercrontabs usercrontabs
|
||||||
|
array_extend ctfiles usercrontabs
|
||||||
|
elif [ ${#ctfiles[*]} -eq 0 ]; then
|
||||||
|
ewarn "aucune planification en cours"
|
||||||
|
set_usercrontabs ctfiles
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
r=1
|
||||||
|
for ctfile in "${ctfiles[@]}"; do
|
||||||
|
r=0 # il y a au moins une planification
|
||||||
|
etitle "$(ppath "$ctfile")" \
|
||||||
|
cat "$ctfile"
|
||||||
|
done
|
||||||
|
exit $r
|
||||||
fi
|
fi
|
||||||
|
|
||||||
crontab="$1"; shift
|
[ -z "$crontab" -o -f "$crontab" ] || die "$crontab: fichier introuvable"
|
||||||
[ -n "$crontab" ] || die_with "Vous devez spécifier le fichier crontab" display_help
|
[ -n "$crontab" ] && crontab="$(abspath "$crontab")"
|
||||||
[ -f "$crontab" ] || die "$crontab: fichier introuvable"
|
|
||||||
crontab="$(abspath "$crontab")"
|
|
||||||
|
|
||||||
if [ "$action" == "install" ]; then
|
if [ "$action" == "install" ]; then
|
||||||
enable_in_crontab "$USCRONTAB_CTLINE $(quoted_arg "$crontab")" && estep "add_to_crontab $USCRONTAB_CTLINE $(quoted_arg "$crontab")"
|
ctline="$USCRONTAB_CTLINE"
|
||||||
|
[ -n "$crontab" ] && ctline="$ctline $(quoted_arg "$crontab")"
|
||||||
|
enable_in_crontab "$ctline" && estep "add_to_crontab $ctline"
|
||||||
|
|
||||||
elif [ "$action" == "uninstall" ]; then
|
elif [ "$action" == "uninstall" ]; then
|
||||||
remove_from_crontab "$USCRONTAB_CTLINE $(quoted_arg "$crontab")" && estep "remove_from_crontab $USCRONTAB_CTLINE $(quoted_arg "$crontab")"
|
ctline="$USCRONTAB_CTLINE"
|
||||||
|
[ -n "$crontab" ] && ctline="$ctline $(quoted_arg "$crontab")"
|
||||||
|
remove_from_crontab "$ctline" && estep "remove_from_crontab $ctline"
|
||||||
|
|
||||||
elif [ "$action" == "run" ]; then
|
elif [ "$action" == "run" ]; then
|
||||||
|
clean_crontab=
|
||||||
|
if [ -n "$crontab" ]; then
|
||||||
|
default_lockfile="/var/run/$scriptname$crontab.lock"
|
||||||
|
else
|
||||||
|
set_usercrontabs usercrontabs
|
||||||
|
ac_set_tmpfile crontab
|
||||||
|
clean_crontab=1
|
||||||
|
for usercrontab in "${usercrontabs[@]}"; do
|
||||||
|
echo "# $usercrontab" >>"$crontab"
|
||||||
|
cat "$usercrontab" >>"$crontab"
|
||||||
|
done
|
||||||
|
default_lockfile="/var/run/$scriptname$USCRONTAB_USER.lock"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$lockfile" == auto ]; then
|
if [ "$lockfile" == auto ]; then
|
||||||
if is_root; then
|
if is_root; then
|
||||||
lockfile="/var/run/$scriptname$crontab.lock"
|
lockfile="$default_lockfile"
|
||||||
mkdirof "$lockfile" || die
|
mkdirof "$lockfile" || die
|
||||||
else
|
else
|
||||||
lockfile=
|
lockfile=
|
||||||
|
@ -284,6 +348,8 @@ elif [ "$action" == "run" ]; then
|
||||||
|
|
||||||
if [ -n "$lockfile" ]; then
|
if [ -n "$lockfile" ]; then
|
||||||
lockwarn="${lockfile%.lock}.lockwarn"
|
lockwarn="${lockfile%.lock}.lockwarn"
|
||||||
|
autoclean "$lockwarn"
|
||||||
|
|
||||||
retry=1
|
retry=1
|
||||||
while [ -n "$retry" ]; do
|
while [ -n "$retry" ]; do
|
||||||
case "$(lf_trylock -h "$lockdelay" "$lockfile")" in
|
case "$(lf_trylock -h "$lockdelay" "$lockfile")" in
|
||||||
|
@ -306,7 +372,8 @@ elif [ "$action" == "run" ]; then
|
||||||
*) retry=;;
|
*) retry=;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
[ -f "$lockwarn" ] && rm "$lockwarn"
|
|
||||||
|
ac_clean "$lockwarn"
|
||||||
autoclean "$lockfile"
|
autoclean "$lockfile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -367,6 +434,6 @@ puis supprimez le cas échéant le fichier $1"
|
||||||
eval "$ctscript"
|
eval "$ctscript"
|
||||||
ac_cleanall
|
ac_cleanall
|
||||||
); ec=$?
|
); ec=$?
|
||||||
[ -f "$lockfile" ] && rm "$lockfile"
|
ac_clean "$lockfile"
|
||||||
exit "$ec"
|
exit "$ec"
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in New Issue