Bug#25341: "init.d/mysql stop" may timeout too quickly
Thirty five seconds is entirely too short of a period to wait for a server to exit. Instead, make a valliant effort to make sure it exits, and only give up after a very long period (arbitrarily chosen as 15 minutes). In addition, if we're being asked to restart the server, then don't try to start again if trying to stop the server failed. --- Return zero by default, when the script exits. --- Set return-/exit-value based on whether we successfully dealt with the PID-file. --- Don't wait that long if the program we're waiting on exits. It should only exit if the server is not going to be started.
This commit is contained in:
parent
828121bd6d
commit
24e3508b0e
@ -30,3 +30,9 @@
|
||||
4554b3722d71SbPiI2Gx-RhbZjmuIQ
|
||||
4558b3d73Cxjlb7Wv1oytdSTthxDfw
|
||||
45771031yRCoM_ZfONdYchPvVEgLRg
|
||||
459a60d8rIxeTuhB3j_QsOwLGdcpng
|
||||
459a61c9OS8PzIsdviZJDkybJ1y1uA
|
||||
459a70691aYIfU2ohV0a3P5iTLpO2A
|
||||
459a7422KF_P7PuU3YQ5qG6ZLEVpiA
|
||||
459a74e4nRcXppMSBYeQQ5efDkTADg
|
||||
45c0fdfb2mz6NdOIsLenJtf6_ZelTA
|
||||
|
@ -143,11 +143,12 @@ parse_manager_arguments() {
|
||||
|
||||
wait_for_pid () {
|
||||
i=0
|
||||
while test $i -lt 35 ; do
|
||||
while test $i -lt 900 ; do
|
||||
sleep 1
|
||||
case "$1" in
|
||||
'created')
|
||||
test -s $pid_file && i='' && break
|
||||
kill -0 $2 || break # if the program goes away, stop waiting
|
||||
;;
|
||||
'removed')
|
||||
test ! -s $pid_file && i='' && break
|
||||
@ -163,8 +164,10 @@ wait_for_pid () {
|
||||
|
||||
if test -z "$i" ; then
|
||||
log_success_msg
|
||||
return 0
|
||||
else
|
||||
log_failure_msg
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
@ -277,26 +280,28 @@ case "$mode" in
|
||||
# Give extra arguments to mysqld with the my.cnf file. This script may
|
||||
# be overwritten at next upgrade.
|
||||
$manager --user=$user --pid-file=$pid_file >/dev/null 2>&1 &
|
||||
wait_for_pid created
|
||||
wait_for_pid created $!; return_value=$?
|
||||
|
||||
# Make lock for RedHat / SuSE
|
||||
if test -w /var/lock/subsys
|
||||
then
|
||||
touch /var/lock/subsys/mysqlmanager
|
||||
fi
|
||||
exit $return_value
|
||||
elif test -x $bindir/mysqld_safe
|
||||
then
|
||||
# Give extra arguments to mysqld with the my.cnf file. This script
|
||||
# may be overwritten at next upgrade.
|
||||
pid_file=$server_pid_file
|
||||
$bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &
|
||||
wait_for_pid created
|
||||
wait_for_pid created $!; return_value=$?
|
||||
|
||||
# Make lock for RedHat / SuSE
|
||||
if test -w /var/lock/subsys
|
||||
then
|
||||
touch /var/lock/subsys/mysql
|
||||
fi
|
||||
exit $return_value
|
||||
else
|
||||
log_failure_msg "Couldn't find MySQL manager or server"
|
||||
fi
|
||||
@ -322,13 +327,14 @@ case "$mode" in
|
||||
echo $echo_n "Shutting down MySQL"
|
||||
kill $mysqlmanager_pid
|
||||
# mysqlmanager should remove the pid_file when it exits, so wait for it.
|
||||
wait_for_pid removed
|
||||
wait_for_pid removed; return_value=$?
|
||||
|
||||
# delete lock for RedHat / SuSE
|
||||
if test -f $lock_dir
|
||||
then
|
||||
rm -f $lock_dir
|
||||
fi
|
||||
exit $return_value
|
||||
else
|
||||
log_failure_msg "MySQL manager or server PID file could not be found!"
|
||||
fi
|
||||
@ -337,8 +343,12 @@ case "$mode" in
|
||||
'restart')
|
||||
# Stop the service and regardless of whether it was
|
||||
# running or not, start it again.
|
||||
$0 stop $other_args
|
||||
$0 start $other_args
|
||||
if $0 stop $other_args; then
|
||||
$0 start $other_args
|
||||
else
|
||||
log_failure_msg "Failed to stop running server, so refusing to try to start."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
'reload')
|
||||
@ -357,3 +367,5 @@ case "$mode" in
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user