rendre check_pidfile idempotent

This commit is contained in:
Jephté Clain 2014-04-23 18:51:10 +04:00
parent b639feca57
commit 16a8af946a

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 pidfile="$(abspath "$1")"
if ! array_contains __USCRONTAB_PIDFILES "$pidfile"; then
local status local status
pidfile_set -r "$1"; status=$? pidfile_set -r "$pidfile"; status=$?
case "$status" in case "$status" in
1) 1)
eerror "${2:-Une synchronisation} est en cours. eerror "${2:-Une synchronisation} est en cours.
Si vous pensez que c'est une erreur, veuillez vérifier le process de pid $(<"$1") Si vous pensez que c'est une erreur, veuillez vérifier le process de pid $(<"$pidfile")
puis supprimez le cas échéant le fichier $1" puis supprimez le cas échéant le fichier $pidfile"
return "$USCRONTAB_STOPEC" return "$USCRONTAB_STOPEC"
;; ;;
10) 10)
die "Une erreur s'est produite pendant l'écriture du fichier de pid. Impossible de continuer" die "Une erreur s'est produite pendant l'écriture du fichier de pid. Impossible de continuer"
;; ;;
esac 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"