快捷搜索:

Slackware启动脚本与System V启动脚本的区别何在?

Slackware版本:Slackware 7.0及以上

Slackware 应用BSD风格的init脚本,而很多其余发行版应用System V风格的init脚本。SysV和BSD脚本都是能让人读懂的,即它们都是shell脚本,而不是已编译的法度榜样。主要的差别在于脚本是若何设计的。

SysV脚本倾向于吸收诸如start、stop、restart之类的参数,依它所启动的法度榜样而定。以是你可以用 /etc/init.d/bind start 这样的敕令来启动BIND,并用 /etc/init.d/bind stop 来竣事BIND。

SysV的启动还倾向于应用符号链接来组织启动进程,例如在 /etc/rc.d/rc.4/中,可能会有指向其余目录中的真正的脚本的各类各样的符号链接。这些链接的敕令会像是 S10network、S25xdm之类,此中的S表示启动(start)该项办事(假如是K,则表示kill),而数字指定了脚本履行的顺序。

SysV风格的启动脚本的主要优点在于能够设置成自动设置设置设备摆设摆设许多器械。例如,若你进入runlevel 6,你可以建立一个链接叫K75bind来终止BIND,条件是链接所指向的文件已经设置好来做这件事。

SysV风格脚本的主要毛病是太过弯弯绕。要是我想增添一个办事,我要先写一个SysV风格的脚本(不是轻易的事),它至少要处置惩罚“start”(还可能有“stop”)。然后,我必须确保在每个要运行这个办事的runlevel中精确地设置好符号链接。假如正好这个办事必要在已经继续编号的两个脚本之间运行,我就必要做一些对符号链接从新编号的事情(例如,S10xxx和S11yyy已经存在,而我想让zzzz在它们之间运行,我就必要对前两者之一从新建立符号链接来把zzzz挤进去)。

想暂时改变SysV的启动进程也是异常苦楚的工作。要是我不想鄙人次启动时运行xxx办事,最简单的法子是删除S10xxx这个链接,不算难吧?但假如我想在每个runlevel中都去掉落它,我就必要从每个有关目录中删除S10xxx这个链接。然后,要是我改了主见,想从新运行xxx,我必要手工从新建立所有的符号链接。

这样子无疑是在已经很繁杂的启动进程上叠床架屋,而Slackware是不会这么做的:它用BSD风格的启动脚本。

BSD风格的脚本是直接了当的shell脚本,它们倾向于顺序运行,而不必要start或stop之类参数。只要系统进入了它们的runlevel就会履行,就这么简单。

BSD风格的主要毛病是你必要一些其他措施来节制后台办事。例如,若我要竣事BIND,我要先用敕令 ps ax|grep named 找出 named的PID,然后kill这个PID(或者用这个pid的文件名)。然则我不能简单地下个敕令 /etc/init.d/bind stop (除非我已经写了个这样的SysV脚本)。

BSD风格脚本的主要优点是它们异常轻易涉猎和编辑。例如,若我想增添一个办事zzzz,我可以在 /etc/rd.d/rc.local中增添一行 /usr/local/bin/zzzz,这样只如果履行rc.local的runlevel,zzzz就会随之运行。要是我只想在runlevel 4履行zzzz,我可以把它放在 /etc/rc.d/rc.4 (不是目录,而是一个脚本)中。假如我要改变履行顺序,我只要把zzzz放在适当的办事之间,多半编辑器都支持在文件中心插入文本(就算ed都支持)。还有,你可以用注释的要领竣事一个办事,然后去掉落注释让它从新运行。

是以,当多半发行版采纳SysV风格时,Slackware采纳了BSD风格。对付许多Slackware用户,BSD风格的易用性赛过SysV风格的强大年夜功能。当然,你可以有自己的意见。

与普遍的不雅点相反,从一种风格转到另一种并不那么艰苦,只要把inittab和rc文件从一个系统拷贝到另一个系统即可。init法度榜样自身没有改变,所谓“风格”多是在inittab和它所调用的脚本中设置的。

译注:现在slackware为了前进兼容性,在/etc/rc.d/供给了rc.sysvinit脚本以适应某些基于SysV启动历程的商业法度榜样的必要。别的,在许多设置办事的脚本中,也吸收start、stop、restart这一类参数,例如rc.sendmail、rc.sshd等。

您可能还会对下面的文章感兴趣: