0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-11-24 08:30:56 +01:00

SERVER-9253 fixed init.d/mongod so that it does not sleep for 5 minutes unnecessarily.

In some version of Linux, killproc() provided in /etc/init.d/functions has a bug
            where it will sleep the full duration of the delay (-d).

Closes #411

Signed-off-by: Benety Goh <benety@mongodb.com>
This commit is contained in:
Alexis Midon 2013-04-03 17:01:28 -04:00 committed by Benety Goh
parent 8f9c2e19ae
commit fb1e82a243

33
rpm/init.d-mongod Normal file → Executable file
View File

@ -72,7 +72,7 @@ start()
stop()
{
echo -n $"Stopping mongod: "
killproc -p "$PIDFILEPATH" -d 300 /usr/bin/mongod
mongo_killproc $mongod
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/mongod
@ -83,6 +83,37 @@ restart () {
start
}
# Send TERM signal to process and wait up to 300 seconds for process to go away.
# If process is still alive after 300 seconds, send KILL signal.
# Built-in killproc() (found in /etc/init.d/functions) is on certain versions of Linux
# where it sleeps for the full $delay seconds if process does not respond fast enough to
# the initial TERM signal.
mongo_killproc()
{
local procname=$1
local -i delay=300
local -i duration=10
local pid=`pidofproc -p "$PIDFILEPATH" $procname`
kill -TERM $pid >/dev/null 2>&1
usleep 100000
local -i x=0
while [ $x -le $delay ] && checkpid $pid; do
sleep $duration
x=$(( $x + $duration))
done
kill -KILL $pid >/dev/null 2>&1
usleep 100000
rm -f "$PIDFILEPATH"
checkpid $pid
local RC=$?
[ "$RC" -eq 0 ] && failure "${procname} shutdown" || success "${procname} shutdown"
RC=$((! $RC))
return $RC
}
RETVAL=0