home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / etc / init.d / rc < prev    next >
Text File  |  1997-11-26  |  2KB  |  98 lines

  1. #! /bin/bash
  2. #
  3. # rc        This file is responsible for starting/stopping
  4. #        services when the runlevel changes.
  5. #
  6. #        Optimization feature:
  7. #        A startup script is _not_ run when the service was
  8. #        running in the previous runlevel and it wasn't stopped
  9. #        in the runlevel transition (most Debian services don't
  10. #        have K?? links in rc{1,2,3,4,5} )
  11. #
  12. # Author:    Miquel van Smoorenburg <miquels@cistron.nl>
  13. #        Bruce Perens <Bruce@Pixar.com>
  14. #
  15. # Version:    @(#)rc  2.73  26-Nov-1997  miquels@cistron.nl
  16. #
  17.  
  18. # Un-comment the following for debugging.
  19. # debug=echo
  20.  
  21. #
  22. # Start script or program.
  23. #
  24. startup() {
  25.   case "$1" in
  26.     *.sh)
  27.         $debug sh "$@"
  28.         ;;
  29.     *)
  30.         $debug "$@"
  31.         ;;
  32.   esac
  33. }
  34.  
  35.   # Ignore CTRL-C only in this shell, so we can interrupt subprocesses.
  36.   trap ":" INT QUIT TSTP
  37.  
  38.   # Set onlcr to avoid staircase effect.
  39.   stty onlcr 0>&1
  40.  
  41.   # Now find out what the current and what the previous runlevel are.
  42.  
  43.   runlevel=$RUNLEVEL
  44.   # Get first argument. Set new runlevel to this argument.
  45.   [ "$1" != "" ] && runlevel=$1
  46.  
  47.   previous=$PREVLEVEL
  48.  
  49.   export runlevel previous
  50.  
  51.   # Is there an rc directory for this new runlevel?
  52.   if [ -d /etc/rc$runlevel.d ]
  53.   then
  54.     # First, run the KILL scripts.
  55.     if [ $previous != N ]
  56.     then
  57.         for i in /etc/rc$runlevel.d/K[0-9][0-9]*
  58.         do
  59.             # Check if the script is there.
  60.             [ ! -f $i ] && continue
  61.  
  62.             # Stop the service.
  63.             startup $i stop
  64.         done
  65.     fi
  66.     # Now run the START scripts for this runlevel.
  67.     for i in /etc/rc$runlevel.d/S*
  68.     do
  69.         [ ! -f $i ] && continue
  70.  
  71.         if [ $previous != N ]
  72.         then
  73.             #
  74.             # Find start script in previous runlevel and
  75.             # stop script in this runlevel.
  76.             #
  77.             suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9]}
  78.             stop=/etc/rc$runlevel.d/K[0-9][0-9]$suffix
  79.             previous_start=/etc/rc$previous.d/S[0-9][0-9]$suffix
  80.             #
  81.             # If there is a start script in the previous level
  82.             # and _no_ stop script in this level, we don't
  83.             # have to re-start the service.
  84.             #
  85.             [ -f $previous_start ] && [ ! -f $stop ] && continue
  86.         fi
  87.         case "$runlevel" in
  88.             0|6)
  89.                 startup $i stop
  90.                 ;;
  91.             *)
  92.                 startup $i start
  93.                 ;;
  94.         esac
  95.     done
  96.   fi
  97. # eof /etc/init.d/rc
  98.