OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

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

这款 rc script 是 init 调用的第一个脚本,用于启动引导过程。

图片

#!/斌/庆典

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

# 开始 rc

#

# 描述:主运行级别控制脚本

#

# 作者:杰拉德·比克曼斯 - [电子邮件保护]

# : DJ 卢卡斯 - [电子邮件保护]

# 更新:布鲁斯·杜布斯 - [电子邮件保护]

#

# 版本:LFS 7.0

#

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

. /lib/lsb/init-functions print_error_msg() 函数

{

日志失败消息

# $i 在调用时设置

MSG="FAILURE:\n\n您不应该阅读此错误消息。\n\n" MSG="${MSG}这意味着发生了不可预见的错误\n" MSG="${MSG}${在”

MSG="${MSG} 退出时返回值为 ${error_value}。\n"


MSG="${MSG}如果您能够将此错误追溯到\n" MSG="${MSG}${DISTRO_MINI} 一书提供的文件中的一个错误,\n" MSG=" ${MSG}请在 ${DISTRO_CONTACT} 通知我们。\n" log_failure_msg "${MSG}"


log_info_msg "按 Enter 继续..." wait_for_user

}


检查脚本状态()

{

# $i 在调用时被设置 if [ ! -f ${i} ]; 然后

log_warning_msg "${i} 不是有效的符号链接。" SCRIPT_STAT="1"

fi


如果 [ ! -x ${i} ]; 然后

图片


log_warning_msg "${i} 不可执行,跳过。" SCRIPT_STAT="1"

fi

}


跑步()

{

如果 [ -z $interactive ]; 然后

${1} ${2}

返回$?

fi


虽然是真的; 做

read -p "Run ${1} ${2} (Yes/no/continue)?" -n 1 runit echo


案例 ${runit} in c | C)

互动=“”

${i} ${2}

ret=${?} 休息;

;;


| | 否)

返回0

;;


是 | 是)

${i} ${2}

ret=${?} 休息

;;

esac 完成


返回 $ret

}


# 读取任何本地设置/覆盖

[ -r /etc/sysconfig/rc.site ] && 源 /etc/sysconfig/rc.site


发行版=${发行版:-“Linux 从头开始​​”}

DISTRO_CONTACT=${DISTRO_CONTACT:-"[电子邮件保护] (需要注册)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}

IPROMPT=${IPROMPT:-"no"}


# 这 3 个信号不会导致我们的脚本退出陷阱 "" INT QUIT TSTP


[ "${1}" != "" ] && 运行级别=${1}


if [ "${runlevel}" == "" ]; 然后回显“用法:${0} " >&2 退出 1

fi

图片


上一个=${PREVLEVEL}

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


如果 [ ! -d /etc/rc.d/rc${runlevel}.d ]; 然后

log_info_msg "/etc/rc.d/rc${runlevel}.d 不存在。\n" exit 1

fi


if [ "$runlevel" == "6" -o "$runlevel" == "0" ]; 然后 IPROMPT="no"; 菲


# 注意:在 ${LOGLEVEL:-7} 中,是 ':' 'dash' '7',不是减 7 if [ "$runlevel" == "S" ]; 然后

[ -r /etc/sysconfig/console ] && source /etc/sysconfig/console dmesg -n "${LOGLEVEL:-7}"

fi


if [ "${IPROMPT}" == "yes" -a "${runlevel}" == "S" ]; 然后

# 发行版欢迎字符串的总长度,不含转义码 wlen=${wlen:-$(echo "Welcome to ${DISTRO}" | wc -c )}welcome_message=${welcome_message:-"Welcome to ${INFO }${发行版}${正常}"}


# 交互式字符串的总长度,不含转义码 ilen=${ilen:-$(echo "Press 'I' to enter interactive startup" | wc -c )}

i_message=${i_message:-"按'${FAILURE}I${NORMAL}'进入交互式启动"}


# dcol 和 icol 是消息前的空格以将消息居中

# 在屏幕上。 itime 是用户按下一个键的等待时间 wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))

icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 )) itime=${itime:-"3"}


echo -e "\n\n"

echo -e "\\033[${wcol}G${welcome_message}" echo -e "\\033[${icol}G${i_message}${NORMAL}" echo ""

read -t "${itime}" -n 1 交互式 2>&1 > /dev/null

fi


# 小写

[ "${interactive}" == "I" ] && interactive="i" [ "${interactive}" != "i" ] && interactive=""


# 从运行级别 S 读取状态文件(如果它存在)

[ -r /var/run/interactive ] && 源 /var/run/interactive


# 尝试停止由前一个运行级别启动的所有服务,

# 并在此运行级别中被杀死

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

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

检查脚本状态

如果 [ "${SCRIPT_STAT}" == "1" ]; 然后 SCRIPT_STAT="0"

继续

fi

图片


suffix=${i#/etc/rc.d/rc$runlevel.d/K[0-9][0-9]} prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix sysinit_start=/etc/rc.d/rcS.d/S[0-9][0-9]$suffix


if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; 然后

如果 [ ! -f ${prev_start} -a ! -f ${sysinit_start} ]; 然后 MSG="警告:\n\n${i} 不能是"

MSG="${MSG} 执行,因为它不是" MSG="${MSG} 未在前一个 " MSG="${MSG} 运行级别 (${previous}) 中启动。 log_warning_msg "$MSG"

继续

fi

fi


运行 ${i} 停止 error_value=${?}


if [ "${error_value}" != "0" ]; 然后print_error_msg; 完成

fi


if [ "${previous}" == "N" ]; 然后导出 IN_BOOT=1; 菲


if [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; 然后触摸 /fastboot

fi


# 启动此运行级别的所有函数

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

if [ "${previous}" != "N" ]; 然后后缀=${i#/etc/rc.d/rc$runlevel.d/S[0-9][0-9]} stop=/etc/rc.d/rc$runlevel.d/K[0 -9][0-9]$suffix prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix


[ -f ${prev_start} -a ! -f ${stop} ] && 继续

fi


检查脚本状态

如果 [ "${SCRIPT_STAT}" == "1" ]; 然后 SCRIPT_STAT="0"

继续

fi


案例 ${runlevel} 在 0|6)

运行 ${i} 停止

;;

*)


ESAC


运行 ${i} 开始

;;


错误值=${?}



if [ "${error_value}" != "0" ]; 然后print_error_msg; 完成


# 在从运行级别 S 切换时存储交互变量,如果不是则删除 if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; 然后

echo "interactive=\"i\"" > /var/run/interactive

其他

rm -f /var/run/interactive 2> /dev/null

fi


# 仅在初始启动时复制启动日志

if [ "${previous}" == "N" -a "${runlevel}" != "S" ]; 然后 cat $BOOTLOG >> /var/log/boot.log


# 标记启动结束

echo "--------" >> /var/log/boot.log


# 删除临时文件 rm -f $BOOTLOG 2> /dev/null

fi


# 结束 rc

if [ "${error_value}" != "0" ]; 然后print_error_msg; 完成


# 在从运行级别 S 切换时存储交互变量,如果不是则删除 if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; 然后

echo "interactive=\"i\"" > /var/run/interactive

其他

rm -f /var/run/interactive 2> /dev/null

fi


# 仅在初始启动时复制启动日志

if [ "${previous}" == "N" -a "${runlevel}" != "S" ]; 然后 cat $BOOTLOG >> /var/log/boot.log


# 标记启动结束

echo "--------" >> /var/log/boot.log


# 删除临时文件 rm -f $BOOTLOG 2> /dev/null

fi


# 结束 rc


图片

图片

:杰拉德·比克曼斯 - [电子邮件保护]

: DJ 卢卡斯 - [电子邮件保护]

:布鲁斯·杜布斯 - [电子邮件保护]

:杰拉德·比克曼斯 - [电子邮件保护]

: DJ 卢卡斯 - [电子邮件保护]

:布鲁斯·杜布斯 - [电子邮件保护]

:LFS 7.0


:使用基于 Matthias Benkmann 的 simpleinit-msb 的代码 http://winterdrache.de/linux/newboot/index.html


该文件应位于 /lib/lsb

:LFS 7.0


:使用基于 Matthias Benkmann 的 simpleinit-msb 的代码 http://winterdrache.de/linux/newboot/index.html


该文件应位于 /lib/lsb

OnWorks 的顶级操作系统云计算: