📄 rc.html
字号:
<HTML><HEAD><TITLE>Creating the rc script</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.63"><LINKREL="HOME"TITLE="Linux From Scratch"HREF="../index.html"><LINKREL="UP"TITLE="Creating system boot scripts"HREF="../chapter07/chapter07.html"><LINKREL="PREVIOUS"TITLE="Creating directories"HREF="../chapter07/createdirs.html"><LINKREL="NEXT"TITLE="Creating the rcS script"HREF="../chapter07/rcs.html"></HEAD><BODYCLASS="sect1"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLEWIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">Linux From Scratch: Version 3.1</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="../chapter07/createdirs.html">Prev</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">Chapter 7. Creating system boot scripts</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="../chapter07/rcs.html">Next</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="sect1"><H1CLASS="sect1"><ANAME="ch07-rc">7.4. Creating the rc script</A></H1><P>The first main boot script is the <TTCLASS="filename">/etc/init.d/rc</TT> script. Create the <TTCLASS="filename">/etc/init.d/rc</TT> script by running thefollowing command:</P><P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="screen"><TTCLASS="userinput"><B>cat > /etc/init.d/rc << "EOF"</B></TT>#!/bin/sh# Begin /etc/init.d/rc## By Jason Pearce - jason.pearce@linux.org# Modified by Gerard Beekmans - gerard@linuxfromscratch.org# print_error_msg based on ideas by Simon Perreault -# nomis80@videotron.ca### Include the functions declared in the /etc/init.d/functions file#source /etc/init.d/functions## The print_error_msg function prints an error message when an unforeseen# error occurred that wasn't trapped for some reason by a evaluate_retval# call or error checking in different ways.print_error_msg(){ echo $FAILURE echo -n "You should not read this error message. It means " echo "that an unforeseen error " echo -n "took place and subscript $i exited with " echo "a return value " echo -n "of $error_value for an unknown reason. If you're able " echo "to trace this error down " echo -n "to a bug in one of the files provided by this book, " echo "please be so kind to " echo -n "inform us at lfs-dev@linuxfromscratch.org" $NORMAL echo echo echo "Press a key to continue..." read}## If you uncomment the debug variable below none of the scripts will be# executed, just the script name and parameters will be echo'ed to the# screen so you can see how the scripts are called by rc.## Un-comment the following for debugging.# debug=echo## Start script or program.# startup() { $debug "$@"} ## Ignore CTRL-C only in this shell, so we can interrupt subprocesses.#trap ":" INT QUIT TSTP## Now find out what the current and what the previous runlevel are. The# $RUNLEVEL variable is set by init for all it's children. This script# runs as a child of init.#runlevel=$RUNLEVEL## Get first argument. Set new runlevel to this argument. If no runlevel# was passed to this script we won't change runlevels.#[ "$1" != "" ] && runlevel=$1if [ "$runlevel" = "" ]then echo "Usage: $0 <runlevel>" >&2 exit 1fi## The same goes for $PREVLEVEL (see above for $RUNLEVEL). previous will# be set to the previous run level. If $PREVLEVEL is not set it means# that there is no previous runlevel and we'll set previous to N.#previous=$PREVLEVEL[ "$previous" = "" ] && previous=Nexport runlevel previous## Is there an rc directory for the new runlevel?#if [ -d /etc/rc$runlevel.d ]then## If so, first collect all the K* scripts in the new run level.# if [ $previous != N ] then for i in /etc/rc$runlevel.d/K* do [ ! -f $i ] && continue## the suffix variable will contain the script name without the leading# Kxxx# suffix=${i#/etc/rc$runlevel.d/K[0-9][0-9][0-9]}## If there is a start script for this K script in the previous runlevel# determine what it's full path is# previous_start=/etc/rc$previous.d/S[0-9][0-9][0-9]$suffix## If there was no previous run level it could be that something was# started in rcS.d (sysinit level) so we'll determine the path for that# possibility as well.# sysinit_start=/etc/rcS.d/S[0-9][0-9][0-9]$suffix## Stop the service if there is a start script in the previous run level # or in the sysinit level. If previous_start or sysinit_start do not # exist the 'continue' command is run which causes the script to abort# this iteration of the for loop and continue with the next iteration.# This boils down to that it won't run the commands after the next two# lines and start over from the top of this for loop. See man bash for# more info on this.# [ ! -f $previous_start ] && [ ! -f $sysinit_start ] && continue## If we found previous_start or sysinit_start, run the K script# startup $i stop error_value=$?## If the return value of the script is not 0, something went wrong with# error checking inside the script. the print_error_msg function will be# called and the message plus the return value of the K script will be# printed to the screen# if [ $error_value != 0 ] then print_error_msg fi 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 ] then## Find start script in previous runlevel and stop script in this# runlevel.# suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9][0-9]} stop=/etc/rc$runlevel.d/K[0-9][0-9][0-9]$suffix previous_start=/etc/rc$previous.d/S[0-9][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; abort this# iteration and start the next one.# [ -f $previous_start ] && [ ! -f $stop ] && continue fi case "$runlevel" in 0|6)## levels 0 and 6 are halt and reboot levels. We don't really start# anything here so we call with the 'stop' parameter# startup $i stop error_value=$?## If the return value of the script is not 0, something went wrong with# error checking inside the script. the print_error_msg function will be# called and the message plus the return value of the K script will be# printed to the screen# if [ $error_value != 0 ] then print_error_msg fi ;; *) startup $i start error_value=$?## If the return value of the script is not 0, something went wrong with# error checking inside the script. the print_error_msg function will be# called and the message plus the return value of the K script will be# printed to the screen# if [ $error_value != 0 ] then print_error_msg fi ;; esac donefi# End /etc/init.d/rc<TTCLASS="userinput"><B>EOF</B></TT></PRE></FONT></TD></TR></TABLE></P></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLEWIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="../chapter07/createdirs.html">Prev</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="../index.html">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="../chapter07/rcs.html">Next</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">Creating directories</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="../chapter07/chapter07.html">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">Creating the rcS script</TD></TR></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -