[projects/rc-scripts] daemon(): fix --waittime usage
glen
glen at pld-linux.org
Mon May 18 16:47:27 CEST 2015
commit 2d338407a02307bc950e2f649fcde7f8fbbda991
Author: Elan Ruusamäe <glen at delfi.ee>
Date: Mon May 18 17:44:48 2015 +0300
daemon(): fix --waittime usage
previous implementation was copy paste from killproc, which assumed pid
already exists when loop is entered.
lib/functions | 39 +++++++++++++++++++++++++++------------
1 file changed, 27 insertions(+), 12 deletions(-)
---
diff --git a/lib/functions b/lib/functions
index 3e111d9..ec8a139 100644
--- a/lib/functions
+++ b/lib/functions
@@ -782,18 +782,10 @@ daemon() {
fi
); then
- if [ -n "$waitname" -a -n "$waittime" ]; then
- # Save basename.
- base=${waitname##*/}
- # Find pid.
- pid=$(pidofproc "$waitname" "$pidfile")
- [ -z "$pid" ] && pid=$(pidofproc "$base" "$pidfile")
- i=0
- while [ "$i" -lt "$waittime" ]; do
- i=$((i + 1))
- checkpid $pid && break
- sleep 1
- done
+ # wait for process (or pidfile) to be created
+ if [ "$waittime" -gt 0 ]; then
+ # waitname can be empty, as if pidfile is in use, it is not relevant
+ waitproc "$waittime" "$waitname" "$pidfile"
fi
log_success "$1 startup"
ok
@@ -806,6 +798,29 @@ daemon() {
return $exit_code
}
+# wait (in seconds) for process (or pidfile) to be created
+# example: waitproc 30 httpd /var/run/httpd.pid
+waitproc() {
+ local waittime=$1 procname=$2 pidfile=$3
+ local i=0 pid
+ local now=$(date +%s)
+ local maxtime=$(($now + $waittime))
+
+ if [ -z "$procname" -a -z "$pidfile" ]; then
+ msg_usage "waitproc: procname or pidfile must be specified"
+ return 2
+ fi
+
+ while [ "$(date +%s)" -lt "$maxtime" ]; do
+ pid=$(pidofproc "$procname" "$pidfile")
+ [ -n "$pid" ] && break
+
+ # start-stop-daemon uses same delay
+ usleep 20000
+ i=$(( i + 1 ))
+ done
+}
+
# A function to stop a program.
killproc() {
local notset killlevel base pid pidfile result delay=3 try
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/projects/rc-scripts.git/commitdiff/2d338407a02307bc950e2f649fcde7f8fbbda991
More information about the pld-cvs-commit
mailing list