D.1. /etc/rc.d/init.d/rc

脚本 rcinit 调用的第一个脚本,它初始化了启动过程。


#!/bin/sh

########################################################################

# Begin $rc_base/init.d/rc

#

# Description : Main Run Level Control Script

#

# Authors     : Gerard Beekmans  - gerard@linuxfromscratch.org

#

# Version     : 00.00

#

# Notes       :

#

########################################################################



. /etc/sysconfig/rc

. ${rc_functions}



# This sets a few default terminal options.

stty sane



# These 3 signals will not cause our script to exit

trap "" INT QUIT TSTP



[ "${1}" != "" ] && runlevel=${1}



if [ "${runlevel}" = "" ]; then

    echo "Usage: ${0} <runlevel>" >&2

    exit 1

fi



previous=${PREVLEVEL}

[ "${previous}" = "" ] && previous=N



if [ ! -d ${rc_base}/rc${runlevel}.d ]; then

    boot_mesg "${rc_base}/rc${runlevel}.d does not exist." ${WARNING}

    boot_mesg_flush

    exit 1

fi



# Attempt to stop all service started by previous runlevel,

# and killed in this runlevel

if [ "${previous}" != "N" ]; then

    for i in $(ls -v ${rc_base}/rc${runlevel}.d/K* 2> /dev/null)

    do

        check_script_status



        suffix=${i#$rc_base/rc$runlevel.d/K[0-9][0-9]}

        prev_start=$rc_base/rc$previous.d/S[0-9][0-9]$suffix

        sysinit_start=$rc_base/rcsysinit.d/S[0-9][0-9]$suffix



        if [ "${runlevel}" != "0" ] && [ "${runlevel}" != "6" ]; then

            if [ ! -f ${prev_start} ] && [ ! -f ${sysinit_start} ]; then

                boot_mesg -n "WARNING:\n\n${i} can't be" ${WARNING}

                boot_mesg -n " executed because it was not"

                boot_mesg -n " not started in the previous"

                boot_mesg -n " runlevel (${previous})."

                boot_mesg "" ${NORMAL}

                boot_mesg_flush

                continue

            fi

        fi

        ${i} stop

        error_value=${?}



        if [ "${error_value}" != "0" ]; then

            print_error_msg

        fi

    done

fi



#Start all functions in this runlevel

for i in $( ls -v ${rc_base}/rc${runlevel}.d/S* 2> /dev/null)

do

    if [ "${previous}" != "N" ]; then

        suffix=${i#$rc_base/rc$runlevel.d/S[0-9][0-9]}

        stop=$rc_base/rc$runlevel.d/K[0-9][0-9]$suffix

        prev_start=$rc_base/rc$previous.d/S[0-9][0-9]$suffix



        [ -f ${prev_start} ] && [ ! -f ${stop} ] && continue

    fi



    check_script_status



    case ${runlevel} in

        0|6)

            ${i} stop

            ;;

        *)

            ${i} start

            ;;

    esac

    error_value=${?}



    if [ "${error_value}" != "0" ]; then

        print_error_msg

    fi

done



# End $rc_base/init.d/rc


Host by Alair