home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / sbin / service < prev    next >
Text File  |  2006-11-29  |  3KB  |  142 lines

  1. #!/bin/sh
  2. #
  3. # /sbin/service        Handle boot and runlevel services
  4. #
  5.  
  6. #
  7. # Only root should do
  8. #
  9. if test "$(id -u)" -ne 0; then
  10.    echo "${0##*/}: only root can use ${0##*/}" 1>&2
  11.    exit 1
  12. fi
  13.  
  14. #
  15. # Location of our service scripts
  16. #
  17. RCDIR="/etc/init.d"
  18.  
  19. #
  20. # Clean environment
  21. #
  22. PATH=/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
  23. test -n "$TERM" || TERM=raw
  24. LANG=POSIX
  25. export PATH TERM LANG
  26.  
  27. exec_rc ()
  28. {
  29.     env -i LANG=$LANG PATH=$PATH TERM=$TERM ${1+"$@"}
  30. }
  31.  
  32. usage ()
  33. {
  34.     echo "Usage: ${0##*/} [--help | --status-all | <service> [<args>| --full-restart]]" 1>&2
  35.     exit 1
  36. }
  37.  
  38. help ()
  39. {
  40.     echo "Usage: ${0##*/} [<options> | <service> [<args> | --full-restart]]"
  41.     echo "Available <options>:"
  42.     echo "  -h,--help        This help."
  43.     echo "  -s,--status-all  List out status of all services."
  44.     echo "Usage for specific <service>:"
  45.     echo "  ${0##*/} service_name argument [option]"
  46.     echo "  ${0##*/} service_name --full-restart"
  47.     echo "  ${0##*/} --full-restart service_name"
  48.     exit 0
  49. }
  50.  
  51.   status_all=0
  52. full_restart=0
  53.         args=""
  54. while test $# -gt 0; do
  55.     opt=
  56.     if test "${1::1}" = "-"; then
  57.     if test ${#1} -gt 2 -a "${1::2}" = "--" ; then
  58.         opt="${1:2}"
  59.     else
  60.         opt="${1:1}"
  61.     fi
  62.     shift
  63.     else
  64.     args="${args:+$args }$1"
  65.     shift
  66.     continue
  67.     fi
  68.  
  69.     case "$opt" in
  70.     status-all|s)   status_all=1 ;;
  71.     full-restart) full_restart=1 ;;
  72.     h*)                help ;;
  73.     *)               usage ;;
  74.     esac
  75. done
  76.  
  77. #
  78. # Determine the status of all services
  79. #
  80. if test $status_all -gt 0 ; then
  81.     if test -n "$args" ; then
  82.     usage 1>&2
  83.     exit 1
  84.     fi
  85.     for rc in ${RCDIR}/*; do
  86.     test ! -x "$rc" -o -d "$rc"    && continue
  87.     case "${rc##*/}" in
  88.     *.local|*.rpm*|*.ba*|*.old|*.new) continue ;;
  89.     *.dpkg|*.save|*.swp|*.core)      continue ;;
  90.     boot|rc|single|halt|reboot)      continue ;;
  91.     powerfail|rx|Makefile|README)      continue ;;
  92.     skeleton|*.d)              continue ;;
  93.     esac
  94.     exec_rc $rc status
  95.     done
  96.     exit 0
  97. fi
  98.  
  99. #
  100. # Do a full restart of a few services
  101. #
  102. if test $full_restart -gt 0 ; then
  103.     if test -z "$args" ; then
  104.     usage 1>&2
  105.     exit 1
  106.     fi
  107.     for rc in $args; do
  108.     if test ! -x ${RCDIR}/$rc ; then
  109.         echo "${0##*/}: no such service $rc" 1>&2
  110.         exit 1
  111.     fi
  112.     done
  113.     status=0
  114.     for rc in $args; do
  115.     rc=${RCDIR}/$rc
  116.     exec_rc $rc stop
  117.     exec_rc $rc start
  118.     test $? -gt 0 && status=1
  119.     done
  120.     exit $status
  121. fi
  122.  
  123.  
  124. #
  125. # Execute single service with options
  126. #
  127. if test -z "${args}" ; then
  128.     usage 1>&2
  129.     exit 1
  130. fi
  131.  
  132. set -- $args
  133. if test ! -x ${RCDIR}/$1 ; then
  134.     echo "${0##*/}: no such service $1" 1>&2
  135.     exit 1
  136. fi
  137. rc=${RCDIR}/$1
  138. shift
  139.  
  140. exec_rc $rc ${1+"$@"}
  141. exit $?
  142.