rendre check_pidfile idempotent

This commit is contained in:
Jephté Clain 2014-04-23 18:51:10 +04:00
parent b639feca57
commit 16a8af946a
1 changed files with 26 additions and 14 deletions

View File

@ -402,21 +402,29 @@ elif [ "$action" == "run" ]; then
ec=0 ec=0
edebug "$ctscript" edebug "$ctscript"
( (
# tableau des fichiers de pid en cours. la conséquence est que ce n'est
# pas une erreur d'appeler à plusieurs reprises check_pidfile avec le
# même fichier
__USCRONTAB_PIDFILES=()
function check_pidfile() { function check_pidfile() {
if [ -n "$1" ]; then if [ -n "$1" ]; then
local status local pidfile="$(abspath "$1")"
pidfile_set -r "$1"; status=$? if ! array_contains __USCRONTAB_PIDFILES "$pidfile"; then
case "$status" in local status
1) pidfile_set -r "$pidfile"; status=$?
eerror "${2:-Une synchronisation} est en cours. case "$status" in
Si vous pensez que c'est une erreur, veuillez vérifier le process de pid $(<"$1") 1)
puis supprimez le cas échéant le fichier $1" eerror "${2:-Une synchronisation} est en cours.
return "$USCRONTAB_STOPEC" Si vous pensez que c'est une erreur, veuillez vérifier le process de pid $(<"$pidfile")
;; puis supprimez le cas échéant le fichier $pidfile"
10) return "$USCRONTAB_STOPEC"
die "Une erreur s'est produite pendant l'écriture du fichier de pid. Impossible de continuer" ;;
;; 10)
esac die "Une erreur s'est produite pendant l'écriture du fichier de pid. Impossible de continuer"
;;
esac
array_add __USCRONTAB_PIDFILES "$pidfile"
fi
fi fi
if [ -n "$3" -a -w "$(dirname "$3")" ]; then if [ -n "$3" -a -w "$(dirname "$3")" ]; then
(set -o noclobber (set -o noclobber
@ -428,7 +436,11 @@ puis supprimez le cas échéant le fichier $1"
return 0 return 0
} }
function remove_pidfile() { function remove_pidfile() {
[ -n "$1" ] && ac_clean "$1" if [ -n "$1" ]; then
local pidfile="$(abspath "$1")"
ac_clean "$pidfile"
array_del __USCRONTAB_PIDFILES "$pidfile"
fi
} }
__ac_forgetall __ac_forgetall
eval "$ctscript" eval "$ctscript"