Skip to content

Commit 33eca29

Browse files
authored
Fixes stale pidfile (#231)
2 parents dacc4a9 + a13567c commit 33eca29

File tree

1 file changed

+32
-31
lines changed

1 file changed

+32
-31
lines changed

src/health-check.sh

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -39,43 +39,44 @@ function trapExitHandler() {
3939
else
4040
echo -n "ERROR ($gSuccessCnt successful, $gFailedCnt failed)" > $RESULT_FILE
4141
fi
42-
rm -f $PID_FILE
4342
exit $exitVal
4443
}
4544

4645

4746
#====================================================================================================================-
4847
#--- Main script -----------------------------------------------------------------------------------------------------
4948

50-
[ -e $PID_FILE ] && { echo "Instance already running, aborting another one" ; exit 1; } # run before installing traphandler!
51-
trap trapExitHandler SIGTERM EXIT
52-
53-
echo "$$" > $PID_FILE
54-
55-
[ -e $URL_FILE ] || { gRetMessage="Cannot read url file $URL_FILE" ; exit 1; }
56-
57-
while IFS= read -r fhemUrl; do
58-
fhemwebState=$( curl \
59-
--connect-timeout 5 \
60-
--max-time 8 \
61-
--silent \
62-
--insecure \
63-
--output /dev/null \
64-
--write-out "%{http_code}" \
65-
--user-agent 'FHEM-Docker/1.0 Health Check' \
66-
"${fhemUrl}" )
67-
if [ $? -ne 0 ] ||
68-
[ -z "${fhemwebState}" ] ||
69-
[ "${fhemwebState}" == "000" ] ||
70-
[ "${fhemwebState:0:1}" == "5" ]; then
71-
gRetMessage="$gRetMessage $fhemUrl: FAILED ($fhemwebState);"
72-
gRetVal=1
73-
((gFailedCnt++))
74-
else
75-
gRetMessage="$gRetMessage $fhemUrl: OK;"
76-
((gSuccessCnt++))
77-
fi
78-
done < $URL_FILE
7949

80-
exit $gRetVal
50+
(
51+
trap trapExitHandler SIGTERM EXIT
52+
53+
# Wait 3 seconds for lock on $PID_FILE (fd 212), exit on failure
54+
flock -x -w 3 212 || { echo "Instance already running, aborting another one" ; exit 1; }
55+
56+
[ -e $URL_FILE ] || { gRetMessage="Cannot read url file $URL_FILE" ; exit 1; }
57+
while IFS= read -r fhemUrl; do
58+
fhemwebState=$( curl \
59+
--connect-timeout 5 \
60+
--max-time 8 \
61+
--silent \
62+
--insecure \
63+
--output /dev/null \
64+
--write-out "%{http_code}" \
65+
--user-agent 'FHEM-Docker/1.0 Health Check' \
66+
"${fhemUrl}" )
67+
if [ $? -ne 0 ] ||
68+
[ -z "${fhemwebState}" ] ||
69+
[ "${fhemwebState}" == "000" ] ||
70+
[ "${fhemwebState:0:1}" == "5" ]; then
71+
gRetMessage="$gRetMessage $fhemUrl: FAILED ($fhemwebState);"
72+
gRetVal=1
73+
((gFailedCnt++))
74+
else
75+
gRetMessage="$gRetMessage $fhemUrl: OK;"
76+
((gSuccessCnt++))
77+
fi
78+
done < $URL_FILE
79+
80+
exit $gRetVal
81+
) 212>${PID_FILE}
8182

0 commit comments

Comments
 (0)