#!/bin/sh # # rc This file is responsible for starting/stopping # services when the runlevel changes. # # Optimization feature: # A startup script is _not_ run when the service was # running in the previous runlevel and it wasn't stopped # in the runlevel transition (most Debian services don't # have K?? links in rc{1,2,3,4,5} ) # # Author: Miquel van Smoorenburg # Bruce Perens # # Version: @(#)rc 2.78 07-Nov-1999 miquels@cistron.nl # . /etc/default/rcS export VERBOSE # # Start script or program. # startup() { # Handle verbosity [ "$VERBOSE" = very ] && echo "INIT: Running $@..." case "$1" in *.sh) # Source shell script for speed. scriptname=$1 shift . $scriptname ;; *) "$@" ;; esac } # Ignore CTRL-C only in this shell, so we can interrupt subprocesses. trap ":" INT QUIT TSTP # Set onlcr to avoid staircase effect. stty onlcr 0>&1 # Now find out what the current and what the previous runlevel are. runlevel=$RUNLEVEL # Get first argument. Set new runlevel to this argument. [ "$1" != "" ] && runlevel=$1 if [ "$runlevel" = "" ] then echo "Usage: $0 " >&2 exit 1 fi previous=$PREVLEVEL [ "$previous" = "" ] && previous=N export runlevel previous # Is there an rc directory for this new runlevel? if [ -d /etc/rc$runlevel.d ] then # First, run the KILL scripts. if [ $previous != N ] then for i in /etc/rc$runlevel.d/K[0-9][0-9]* do # Check if the script is there. [ ! -f $i ] && continue # Stop the service. startup $i stop done fi # Now run the START scripts for this runlevel. for i in /etc/rc$runlevel.d/S* do [ ! -f $i ] && continue if [ $previous != N ] && [ $previous != S ] then # # Find start script in previous runlevel and # stop script in this runlevel. # suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9]} stop=/etc/rc$runlevel.d/K[0-9][0-9]$suffix previous_start=/etc/rc$previous.d/S[0-9][0-9]$suffix # # If there is a start script in the previous level # and _no_ stop script in this level, we don't # have to re-start the service. # [ -f $previous_start ] && [ ! -f $stop ] && continue fi case "$runlevel" in 0|6) startup $i stop ;; *) startup $i start ;; esac done fi