]> git.pld-linux.org Git - projects/rc-scripts.git/commitdiff
- some code from RH (nicer than old code)
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 14 Jul 2002 21:11:17 +0000 (21:11 +0000)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 14 Jul 2002 21:11:17 +0000 (21:11 +0000)
svn-id: @1034

rc.d/init.d/functions
service

index 17a01844d54711025d49ee1b627baa7de3abfda7..c74b167a6f4c1df3113bc6bd8a47cb282f12a6ed 100644 (file)
@@ -1,7 +1,7 @@
 # functions    This file contains functions to be used by most or all
 #              shell scripts in the /etc/init.d directory.
 #
-# $Id: functions,v 1.72 2002/06/13 13:06:13 grabba Exp $
+# $Id: functions,v 1.73 2002/07/14 21:11:17 misiek Exp $
 #
 # Author:      Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
 # Hacked by:    Greg Galloway and Marc Ewing
@@ -45,7 +45,7 @@ termput()
                  esac
        else
                # check if we are on proper terminal
-               tput longname > /dev/null 2>&1 /dev/null || return
+               tput longname > /dev/null 2>&1 || return
 
                case "$1" in
                  hpa | cuu* | el)
@@ -211,6 +211,16 @@ deltext()
        termput hpa $INIT_COL
 }
 
+# Check if $pid (could be plural) are running
+checkpid()
+{
+    while [ "$1" ]; do
+       [ -d "/proc/$1" ] && return 0
+       shift
+    done
+    return 1
+}
+
 # Usage run_cmd Message command_to_run
 run_cmd()
 {
@@ -290,7 +300,7 @@ daemon()
 
        # And start it up.
        busy
-       if errors=$(HOME=/tmp TMPDIR=/tmp nice -n ${SERVICE_RUN_NICE_LEVEL:-$DEFAULT_SERVICE_RUN_NICE_LEVEL} initlog -c "$prog" 2>&1); then
+       if errors=$(USER=root HOME=/tmp TMPDIR=/tmp nice -n ${SERVICE_RUN_NICE_LEVEL:-$DEFAULT_SERVICE_RUN_NICE_LEVEL} initlog -c "$prog" 2>&1); then
                log_success "$1 startup"
                ok
        else
@@ -305,7 +315,7 @@ daemon()
 # A function to stop a program.
 killproc() 
 {
-       typeset notset killlevel base pid
+       typeset notset killlevel base pid result
        # Test syntax.
        if [ $# = 0 ]; then
                msg_usage " killproc {program} [signal]"
@@ -324,139 +334,134 @@ killproc()
        fi
 
         # Save basename.
-        base=$(basename $1)
+        base=$(basename "$1")
 
         # Find pid.
-        pid=$(pidofproc $base)
+       pid=$(pidofproc "$1")
+       [ -z "$pid" ] && pid=$(pidofproc "$base")
 
         # Kill it.
         if [ -n "$pid" ] ; then
                if [ "$notset" = "1" ] ; then
-                       if ps h $pid>/dev/null 2>&1; then
-                               # TERM first, then KILL if not dead
-                               kill -TERM $pid >/dev/null 2>&1
-                               usleep 100000
-                               if ps h $pid >/dev/null 2>&1 ; then
-                                       sleep 1
-                                       if ps h $pid >/dev/null 2>&1 ; then
-                                               sleep 3
-                                               if ps h $pid >/dev/null 2>&1 ; then
-                                                       kill -KILL $pid >/dev/null 2>&1
-                                               fi
-                                       fi
-                               fi
-                               if (ps h $pid >/dev/null 2>&1); then
-                                  fail
-                                  log_failed "$1 shutdown"
-                               else
-                                  ok
-                                  log_success "$1 shutdown"
-                               fi
-                       else
-                               died
-                               log_failed "$1 shutdown"
+                   if checkpid $pid 2>&1; then
+                        # TERM first, then KILL if not dead
+                       kill -TERM $pid
+                       usleep 100000
+                       if checkpid $pid && sleep 1 &&
+                           checkpid $pid && sleep 3 &&
+                           checkpid $pid; then
+                           kill -KILL $pid
+                           usleep 100000
                        fi
+                   fi
+                   checkpid $pid
+                   result=$?
+                   if [ "$result" -eq 0 ]; then
+                       fail
+                       log_failed "$1 shutdown"
+                   else
+                       ok
+                       log_success "$1 shutdown"
+                   fi
+                   result=$(( ! $result ))
                # use specified level only
                else
-                       if ps h $pid >/dev/null 2>&1; then
-                               if (kill $killlevel $pid); then
-                                  ok
-                                  log_success "$1 got $killlevel"
-                               else
-                                  fail
-                                  log_failed "$1 didn't get $killlevel"
-                               fi
+                   if checkpid $pid > /dev/null 2>&1; then
+                       kill $killlevel $pid
+                       result=$?
+                       if [ "$result" -eq 0 ]; then
+                           ok
+                           log_success "$1 got $killlevel"
                        else
-                               died
-                               log_failed "$1 shutdown"
+                           fail
+                           log_failed "$1 didn't get $killlevel"
                        fi
+                   else
+                       died
+                       log_failed "$1 shutdown"
+                   fi
                fi
        else
-               died
-               log_failed "$1 shutdown"
+           died
+           log_failed "$1 shutdown"
+           result=1
        fi
 
         # Remove pid file if any.
        if [ "$notset" = "1" ]; then
-               rm -f /var/run/$base.pid
+               rm -f /var/run/${base}.pid
        fi
+
+       return $result
 }
 
 # A function to find the pid of a program.
 pidofproc() 
 {
-       typeset pid
-       # Test syntax.
-       if [ $# = 0 ] ; then
-               msg_usage " pidofproc {program}"
-               return 1
-       fi
+    typeset pid base
+    base=$(basename "$1")
 
-       # First try "/var/run/*.pid" files
-       if [ -f /var/run/$1.pid ] ; then
-               pid=$(head -1 /var/run/$1.pid)
-               if [ -n "$pid" ] ; then
-                       echo $pid
-                       return 0
-               fi
+    # Test syntax.
+    if [ $# = 0 ] ; then
+       msg_usage " pidofproc {program}"
+       return 1
+    fi
+    
+    # First try "/var/run/*.pid" files
+    if [ -f /var/run/${base}.pid ] ; then
+       typeset line p pid
+       pid=
+       read line < /var/run/${base}.pid
+       for p in $line; do
+           [ -z "$(echo "$p" | awk ' { gsub(/[0-9]/,""); print $0; } ' )" ] && pid="$pid $p"
+       done
+       if [ -n "$pid" ]; then
+           echo $pid
+           return 0
        fi
-
+    fi
+    
        # Next try "pidof"
-       pid=$(pidof -o $$ -o $PPID -o %PPID -x $1)
-       if [ -n "$pid" ] ; then
-               echo $pid
-               return 0
-       fi
-
-        # Finally try to extract it from ps
-        ps ax | awk 'BEGIN { prog=ARGV[1]; ARGC=1 }
-                           { if ((prog == $5) || (("(" prog ")") == $5) ||
-                             (("[" prog "]") == $5) ||
-                           ((prog ":") == $5)) { print $1 ; exit 0 } }' $1
+    pidof -o $$ -o $PPID -o %PPID -x "$1" || \
+       pidof -o $$ -o $PPID -o %PPID -x "${base}"
 }
 
 status() 
 {
-       # Test syntax.
-       if [ $# = 0 ] ; then
-               msg_usage " status {subsys} [{daemon}]"
-               return 1
-       fi
-
-       subsys=$1
-       daemon=${2:-$subsys}
-
-       # First try "pidof"
-       pid=$(pidof -o $$ -o $PPID -o %PPID -x $daemon)
-       if [ -n "$pid" ] ; then
-               nls "%s (pid %s) is running..." "$daemon" "$pid"
-               return 0
-        else
-                pid=`ps ax | awk 'BEGIN { prog=ARGV[1]; ARGC=1 }
-                           { if ((prog == $5) || (("(" prog ")") == $5) ||
-                             (("[" prog "]") == $5) ||
-                           ((prog ":") == $5)) { print $1 ; exit 0 } }' $1`
-                if [ "$pid" != "" ] ; then
-                        nls "%s (pid %s) is running..." "$daemon" "$pid"
-                        return 0
-                fi
-       fi
+    typeset base pid
+    base=$(basename "$1")
 
-       # Next try "/var/run/*.pid" files
-       if [ -f /var/run/$daemon.pid ] ; then
-               pid=$(head -1 /var/run/$1.pid)
-               if [ -n "$pid" ] ; then
-                       nls "%s dead but pid file exists" "$1"
-                       return 1
-               fi
-       fi
-       # See if /var/lock/subsys/$subsys exists
-       if [ -f /var/lock/subsys/$subsys ]; then
-               nls "%s dead but subsys locked" "$daemon"
-               return 2
+    # Test syntax.
+    if [ $# = 0 ] ; then
+       msg_usage " status {subsys} [{daemon}]"
+       return 1
+    fi
+
+    # First try "pidof"
+    pid=$(pidof -o $$ -o $PPID -o %PPID -x $1 || \
+       pidof -o $$ -o $PPID -o %PPID -x ${base})
+
+    if [ "$pid" != "" ]; then
+       nls "%s (pid %s) is running..." "$base" "$pid"
+       return 0
+    fi
+
+    # Next try "/var/run/*.pid" files
+    if [ -f /var/run/${base}.pid ]; then
+       read pid < /var/run/${base}.pid
+       if [ "$pid" != "" ]; then
+           nls "%s dead but pid file exists" "$base"
+           return 1
        fi
-       nls "%s is stopped" "$subsys"
-       return 3
+    fi
+
+    # See if /var/lock/subsys/$subsys exists
+    if [ -f /var/lock/subsys/$subsys ]; then
+       nls "%s dead but subsys locked" "$base"
+       return 2
+    fi
+    nls "%s is stopped" "$base"
+    return 3
 }
 
 # Confirm whether we really want to run this service
@@ -606,5 +611,11 @@ msg_Already_Running () { msg_already_running "$*"; }
 msg_Not_Running () { msg_not_running "$*"; }
 msg_Usage () { msg_usage "$*"; }
 
-# This must be last line !
-# vi:syntax=sh:tw=78:ts=8:sw=4
+#/*
+# * Local variables:
+# * mode: sh
+# * indent-tabs-mode: notnil
+# * End:
+# *
+# * vim: shiftwidth=8:
+# */
diff --git a/service b/service
index 8b3e67a2e411a9bb56d9ef304d08f0663ab8b8fa..73fbf7679443485ee1d5a4424f04edd01a634b4e 100755 (executable)
--- a/service
+++ b/service
@@ -11,7 +11,7 @@ else
 fi
 
 if [ $# -eq 0 ]; then
-   echo $"${USAGE}" >&2
+   echo "${USAGE}" >&2
    exit 1
 fi
 
@@ -19,11 +19,11 @@ cd /
 while [ $# -gt 0 ]; do
   case "${1}" in
     --help | -h | --h* )
-       echo $"${USAGE}" >&2
+       echo "${USAGE}" >&2
        exit 0
        ;;
     --version | -V )
-       echo $"${VERSION}" >&2
+       echo "${VERSION}" >&2
        exit 0
        ;;
     *)
@@ -63,6 +63,6 @@ done
 if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
    env -i LANG=$LANG "${SERVICEDIR}/${SERVICE}" ${OPTIONS}
 else
-   echo $"${SERVICE}: unrecognized service" >&2
+   echo "${SERVICE}: unrecognized service" >&2
    exit 1
 fi
This page took 0.044337 seconds and 4 git commands to generate.