了解Bash init脚本启动/停止/重启/

时间:2016-10-09 08:06:33

标签: linux bash

我们可以在文件夹/etc/rc.d/init.d/下进行大量服务(bash脚本)。他们都看起来像这样:

case "$1" in 
start)   echo "start" ;;
stop)    echo "stop" ;;
restart) echo "restart" ;;
esac

我只是不明白我们启动计算机,内核如何调用这些启动脚本并传入参数“start” 或者当服务死亡时,谁调用脚本并传入参数“restart”

有人可以向我解释一下吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

这取决于您的分发/版本/配置选择。 对于具有System V风格启动文件的Debian,请查看http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit

粗略地说,每个运行级别都有一个目录,例如/etc/rc2.d用于级别2,包含指向/etc/init.d中常规文件(脚本)的符号链接

在某个时间点,当转到第2级时,将运行以下脚本循环

for s in /etc/rc2.d/S* 
do
   $s start
done

按字母顺序开始执行名称以S开头的所有链接。实际上S后跟两位数字,指定执行顺序。

离开运行级别时K *文件的想法相同。

现在回到你的问题:这是/ etc / inittab文件中某些行的工作

# The default runlevel.
id:2:initdefault:

....
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
...

答案 1 :(得分:0)

init shell脚本的实际位置在/etc/init.d下。这些脚本符号链接到rc目录,如/etc/rc0.d,/etc/rc1.d,/etc/rc2.d。然后,在每个rcn.d目录中,我们有文件名中以K或S开头的文件,后跟两位数字。这些符号链接文件指向实际的init shell脚本,其中K表示Kill(即停止),“S”表示Start。

例如:
S19postgresql
S20clamav-freshclam的
S50saned
S70pppd的DNS
S99ondemand