home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / etc / init.d / multipathd < prev    next >
Text File  |  2006-11-29  |  4KB  |  156 lines

  1. #! /bin/sh
  2. # Copyright (c) 1995-2001 SuSE GmbH Nuernberg, Germany.
  3. #
  4. # Author: Thorsten Kukuk <feedback@suse.de>
  5. #
  6. # init.d/routed
  7. #
  8. #   and symbolic its link
  9. #
  10. # /usr/sbin/rcrouted
  11. #
  12. ### BEGIN INIT INFO
  13. # Provides:          multipathd
  14. # Required-Start:    $syslog
  15. # Required-Stop:
  16. # Default-Start:     3 5
  17. # Default-Stop:         0 1 2 4 6
  18. # Description:       Starts multipath daemon
  19. ### END INIT INFO
  20.  
  21. PATH=/bin:/usr/bin:/sbin:/usr/sbin
  22. DAEMON=/sbin/multipathd
  23. PIDFILE=/var/run/multipathd.pid
  24.  
  25. # Set the maximum number of open files
  26. MAX_OPEN_FDS=4096
  27.  
  28. test -x $DAEMON || exit 5
  29.  
  30. # Shell functions sourced from /etc/rc.status:
  31. #      rc_check         check and set local and overall rc status
  32. #      rc_status        check and set local and overall rc status
  33. #      rc_status -v     ditto but be verbose in local rc status
  34. #      rc_status -v -r  ditto and clear the local rc status
  35. #      rc_failed        set local and overall rc status to failed
  36. #      rc_reset         clear local rc status (overall remains)
  37. #      rc_exit          exit appropriate to overall rc status
  38. . /etc/rc.status
  39.  
  40. # First reset status of this service
  41. rc_reset
  42.  
  43. # Return values acc. to LSB for all commands but status:
  44. # 0 - success
  45. # 1 - misc error
  46. # 2 - invalid or excess args
  47. # 3 - unimplemented feature (e.g. reload)
  48. # 4 - insufficient privilege
  49. # 5 - program not installed
  50. # 6 - program not configured
  51. # 7 - program is not running
  52. # Note that starting an already running service, stopping
  53. # or restarting a not-running service as well as the restart
  54. # with force-reload (in case signalling is not supported) are
  55. # considered a success.
  56.  
  57. case "$1" in
  58.     start)
  59.     echo -n "Starting multipathd"
  60.  
  61.     modprobe dm-multipath
  62.  
  63.     # Set the maximum number of open files
  64.     if [ -n "$MAX_OPEN_FDS" ] ; then
  65.         ulimit -n $MAX_OPEN_FDS
  66.     fi
  67.  
  68.     if [ -f $PIDFILE ]; then
  69.         PID="$(cat $PIDFILE)"
  70.         PROCNAME="$(ps -o cmd --no-headers $PID)"
  71.     fi
  72.  
  73.     if [ "$PROCNAME" != "$DAEMON" ]; then
  74.         $DAEMON
  75.     fi
  76.     
  77.     # Remember status and be verbose
  78.     rc_status -v
  79.     sleep 1
  80.     ;;
  81.     stop)
  82.     echo -n "Shutting down multipathd"
  83.     # Because of the way how multipathd sets up its own namespace
  84.     # and chroots to it, killproc cannot be used with this process.
  85.     # So implement a cruder version:
  86.     if [ -f $PIDFILE ]; then
  87.         PID="$(cat $PIDFILE)"
  88.         PROCNAME="$(ps -o cmd --no-headers $PID)"
  89.     fi
  90.  
  91.     if [ "$PROCNAME" == "$DAEMON" ]; then
  92.         kill -TERM $PID
  93.     fi
  94.  
  95.     # Remember status and be verbose
  96.     rc_status -v
  97.     ;;
  98.     try-restart)
  99.     ## Stop the service and if this succeeds (i.e. the 
  100.     ## service was running before), start it again.
  101.         $0 status >/dev/null &&  $0 restart
  102.  
  103.     # Remember status and be quiet
  104.     rc_status
  105.     ;;
  106.     restart|force-reload)
  107.     ## Stop the service and regardless of whether it was
  108.     ## running or not, start it again.
  109.     $0 stop
  110.     $0 start
  111.  
  112.     # Remember status and be quiet
  113.     rc_status
  114.     ;;
  115.     reload)
  116.     ## Like force-reload, but if daemon does not support
  117.     ## signalling, do nothing (!)
  118.  
  119.     # If it does not support reload:
  120.     exit 3
  121.     ;;
  122.     status)
  123.     echo -n "Checking for multipathd: "
  124.  
  125.     # Status has a slightly different for the status command:
  126.     # 0 - service running
  127.     # 1 - service dead, but /var/run/  pid  file exists
  128.     # 2 - service dead, but /var/lock/ lock file exists
  129.     # 3 - service not running
  130.  
  131.     if [ -f $PIDFILE ]; then
  132.         PID="$(cat $PIDFILE)"
  133.         PROCNAME="$(ps -o cmd --no-headers $PID)"
  134.         if [ "$PROCNAME" == "$DAEMON" ]; then
  135.             (exit 0)
  136.         else
  137.             (exit 1)
  138.         fi
  139.     else
  140.         (exit 3)
  141.     fi
  142.  
  143.     rc_status -v
  144.     ;;
  145.     probe)
  146.     ## Optional: Probe for the necessity of a reload,
  147.     ## give out the argument which is required for a reload.
  148.     ;;
  149.     *)
  150.     echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
  151.     exit 1
  152.     ;;
  153. esac
  154. rc_exit
  155.