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
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() {
if [ -n "$1" ]; then
local pidfile="$(abspath "$1")"
if ! array_contains __USCRONTAB_PIDFILES "$pidfile"; then
local status
pidfile_set -r "$1"; status=$?
pidfile_set -r "$pidfile"; status=$?
case "$status" in
1)
eerror "${2:-Une synchronisation} est en cours.
Si vous pensez que c'est une erreur, veuillez vérifier le process de pid $(<"$1")
puis supprimez le cas échéant le fichier $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 $pidfile"
return "$USCRONTAB_STOPEC"
;;
10)
die "Une erreur s'est produite pendant l'écriture du fichier de pid. Impossible de continuer"
;;
esac
array_add __USCRONTAB_PIDFILES "$pidfile"
fi
fi
if [ -n "$3" -a -w "$(dirname "$3")" ]; then
(set -o noclobber
@ -428,7 +436,11 @@ puis supprimez le cas échéant le fichier $1"
return 0
}
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
eval "$ctscript"