Files
poky/openembedded/packages/sysvinit/sysvinit/rc
Richard Purdie 4b46c1f6e8 Initial population
git-svn-id: https://svn.o-hand.com/repos/poky@1 311d38ba-8fff-0310-9ca6-ca027cbcb966
2005-08-31 10:45:47 +00:00

2.1 KiB
Executable File

#!/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 miquels@cistron.nl

Bruce Perens Bruce@Pixar.com

Version: @(#)rc 2.78 07-Nov-1999 miquels@cistron.nl

. /etc/default/rcS export VERBOSE

Start script or program.

startup() { case "$1" in *.sh) sh "$@" ;; *) "$@" ;; 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

eof /etc/init.d/rc