ams*_*ams 4 rhel init sysvinit init.d
如果我告诉我的系统进入运行级别 3,这是否意味着它首先运行运行级别 0、1、2,然后最终运行运行级别 3?
我以为这个问题的答案是肯定的。但是当我查看我的 RHEL 6 系统时,我看到许多 rcX.d 目录包含相同的符号链接。
在我的/etc/rc.d/rc0.d/
[root@centos6 rc.d]# ls -lah /etc/rc.d/rc0.d/
total 8.0K
drwxr-xr-x. 2 root root 4.0K Jun 27 11:59 .
drwxr-xr-x. 10 root root 4.0K Jul 9 15:06 ..
lrwxrwxrwx. 1 root root 13 Jun 12 13:02 K05atd -> ../init.d/atd
lrwxrwxrwx. 1 root root 14 Jun 12 13:01 K10cups -> ../init.d/cups
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 18 Jun 12 12:51 K15svnserve -> ../init.d/svnserve
lrwxrwxrwx. 1 root root 14 Jun 12 10:58 K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K30postfix -> ../init.d/postfix
lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K50dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx. 1 root root 20 Jun 12 10:57 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 15 Jun 12 10:57 K60crond -> ../init.d/crond
lrwxrwxrwx. 1 root root 25 Jun 27 11:59 K65vboxadd-service -> ../init.d/vboxadd-service
lrwxrwxrwx. 1 root root 17 Jun 27 11:58 K70vboxadd -> ../init.d/vboxadd
lrwxrwxrwx. 1 root root 21 Jun 27 11:59 K70vboxadd-x11 -> ../init.d/vboxadd-x11
lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K73winbind -> ../init.d/winbind
lrwxrwxrwx. 1 root root 19 Jun 12 12:26 K74haldaemon -> ../init.d/haldaemon
lrwxrwxrwx. 1 root root 26 Jun 12 10:58 K75blk-availability -> ../init.d/blk-availability
lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K75netfs -> ../init.d/netfs
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K75udev-post -> ../init.d/udev-post
lrwxrwxrwx. 1 root root 24 Jun 12 12:26 K84NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx. 1 root root 24 Jun 27 11:59 K84wpa_supplicant -> ../init.d/wpa_supplicant
lrwxrwxrwx. 1 root root 19 Jun 12 10:58 K85mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx. 1 root root 20 Jun 12 12:25 K85messagebus -> ../init.d/messagebus
lrwxrwxrwx. 1 root root 20 Jun 12 10:58 K87multipathd -> ../init.d/multipathd
lrwxrwxrwx. 1 root root 21 Jun 12 10:57 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K88auditd -> ../init.d/auditd
lrwxrwxrwx. 1 root root 15 Jun 27 11:59 K88iscsi -> ../init.d/iscsi
lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K88rsyslog -> ../init.d/rsyslog
lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K89iscsid -> ../init.d/iscsid
lrwxrwxrwx. 1 root root 21 Jun 12 13:01 K89portreserve -> ../init.d/portreserve
lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx. 1 root root 17 Jun 12 11:15 K90network -> ../init.d/network
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K92ip6tables -> ../init.d/ip6tables
lrwxrwxrwx. 1 root root 18 Jun 12 10:57 K92iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 22 Jun 12 10:58 K99lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx. 1 root root 17 Jun 12 11:15 S00killall -> ../init.d/killall
lrwxrwxrwx. 1 root root 14 Jun 12 11:15 S01halt -> ../init.d/halt
lrwxrwxrwx. 1 root root 15 Jun 26 12:32 S95jexec -> ../init.d/jexec
Run Code Online (Sandbox Code Playgroud)
在/etc/rc.d/rc1.d/ 中,我看到了与 rc0.d 中相同的一组符号链接以及额外的链接。这似乎表明目录 rc0.d、rc1.d 是独立的,并且要运行级别 1,它不会执行运行级别 0 中的内容。这意味着如果 rc0 中的符号链接如何,可能会发生不好的事情.d 在 rc1.d 中没有完全复制,...等。
那么它是如何真正起作用的呢?它只是扫描特定 rc.X 目录中的文件还是遍历所有级别低于传递给 init 的 rc 级别的 rc.X 目录?
[root@centos6 rc.d]# ls -lah /etc/rc.d/rc1.d/
total 8.0K
drwxr-xr-x. 2 root root 4.0K Jun 27 11:59 .
drwxr-xr-x. 10 root root 4.0K Jul 9 15:06 ..
lrwxrwxrwx. 1 root root 13 Jun 12 13:02 K05atd -> ../init.d/atd
lrwxrwxrwx. 1 root root 14 Jun 12 13:01 K10cups -> ../init.d/cups
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 18 Jun 12 12:51 K15svnserve -> ../init.d/svnserve
lrwxrwxrwx. 1 root root 14 Jun 12 10:58 K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K30postfix -> ../init.d/postfix
lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K50dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx. 1 root root 20 Jun 12 10:57 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 15 Jun 12 10:57 K60crond -> ../init.d/crond
lrwxrwxrwx. 1 root root 25 Jun 27 11:59 K65vboxadd-service -> ../init.d/vboxadd-service
lrwxrwxrwx. 1 root root 17 Jun 27 11:58 K70vboxadd -> ../init.d/vboxadd
lrwxrwxrwx. 1 root root 21 Jun 27 11:59 K70vboxadd-x11 -> ../init.d/vboxadd-x11
lrwxrwxrwx. 1 root root 17 Jun 12 12:26 K73winbind -> ../init.d/winbind
lrwxrwxrwx. 1 root root 19 Jun 12 12:26 K74haldaemon -> ../init.d/haldaemon
lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K75netfs -> ../init.d/netfs
lrwxrwxrwx. 1 root root 24 Jun 12 12:26 K84NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx. 1 root root 24 Jun 27 11:59 K84wpa_supplicant -> ../init.d/wpa_supplicant
lrwxrwxrwx. 1 root root 19 Jun 12 10:58 K85mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx. 1 root root 20 Jun 12 12:25 K85messagebus -> ../init.d/messagebus
lrwxrwxrwx. 1 root root 20 Jun 12 10:58 K87multipathd -> ../init.d/multipathd
lrwxrwxrwx. 1 root root 21 Jun 12 10:57 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K88auditd -> ../init.d/auditd
lrwxrwxrwx. 1 root root 15 Jun 27 11:59 K88iscsi -> ../init.d/iscsi
lrwxrwxrwx. 1 root root 17 Jun 12 10:57 K88rsyslog -> ../init.d/rsyslog
lrwxrwxrwx. 1 root root 16 Jun 12 10:58 K89iscsid -> ../init.d/iscsid
lrwxrwxrwx. 1 root root 21 Jun 12 13:01 K89portreserve -> ../init.d/portreserve
lrwxrwxrwx. 1 root root 15 Jun 12 11:15 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx. 1 root root 17 Jun 12 11:15 K90network -> ../init.d/network
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 K92ip6tables -> ../init.d/ip6tables
lrwxrwxrwx. 1 root root 18 Jun 12 10:57 K92iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 22 Jun 12 10:58 S02lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx. 1 root root 26 Jun 12 10:58 S25blk-availability -> ../init.d/blk-availability
lrwxrwxrwx. 1 root root 19 Jun 12 10:57 S26udev-post -> ../init.d/udev-post
lrwxrwxrwx. 1 root root 15 Jun 26 12:32 S95jexec -> ../init.d/jexec
lrwxrwxrwx. 1 root root 16 Jun 12 11:15 S99single -> ../init.d/single
Run Code Online (Sandbox Code Playgroud)
如果我告诉我的系统进入运行级别 3,这是否意味着它首先运行运行级别 0、1、2,然后最终运行运行级别 3?
不,不是的。运行级别以这种方式不连续。
举个例子:运行级别 0通常是“关闭”运行级别,它停止所有服务并最终停止(并可能关闭)系统。如果要进入完全运行的系统,init 首先进入运行级别 0,那将不是很好。
也就是说,在启动过程中通常会有一个进展。内核在运行级别 1 中初始化,然后将控制权传递给通常以这样一种方式配置的 init :它进入运行级别 2(无网络的多用户),然后是运行级别 3(完全可操作的文本模式)和可能的运行级别 5(完全可操作)图形模式)。但这实际上是完全可配置的,进入哪个运行级别的细节主要是约定俗成的。我认为至少在过去,Debian 已经将运行级别 4 用于完全操作的图形模式,例如,在我的 Debian Wheezy 上,运行级别 2 和 3 似乎相同(不输出任何内容)。每个运行级别对应的确切内容取决于管理员。diff <(ls /etc/rc2.d) <(ls /etc/rc3.d)
同样按照惯例,运行级别 6 通常设置为重新启动系统;您可以直接从例如运行级别 1 跳转到运行级别 6,尤其是在系统维护期间,如果某些内容阻止操作系统正常启动。
还值得注意的是,非 Linux 系统可能对不同运行级别的用途有不同的看法,或者有不同数量的可用运行级别。这个概念在 *nix 世界中可能非常普遍,但实现和实际使用可能会有很大不同。
总而言之,“运行级别”只是一种将相关进程和系统状态分组到可由管理员选择的可管理包中的便捷方式。(顺便说一句,Windows 的故障安全模式、网络故障安全、命令提示符故障安全、正常启动等具有非常相似的概念。)
当您切换运行级别时,唯一执行的是/etc/rc.d/rc${NEW_LEVEL}.d/.
这意味着您是对的:从另一个运行级别切换时,每个 rc*.d目录都需要能够处理所有进程/服务更改。因此,每个 rc 目录都包含用于达到该运行级别的全套脚本。
假设您要切换到运行级别 3。/etc/rc.d/rc3.d/K*脚本将尝试终止在您之前的运行级别(可以是任意数字)中运行的任何进程,并且/etc/rc.d/rc3.d/S*脚本将启动任何需要启动的进程(并且尚未启动)从上一个运行级别开始)。
显然,管理所有这些符号链接将是一件非常痛苦的事情,因此有一些实用程序可以帮助管理这一点。在 Debian 和 Ubuntu(至少,也许其他)上,您可以用于update-rc.d有选择地启用/禁用 中找到的脚本/etc/init.d,或者将它们设置为每个脚本的“默认”或推荐设置。这将为您创建和更新所有符号链接,以反映您想要实施的任何配置更改。在 CentOS 上,我知道您可以使用ntsysv或chkconfig来做同样的事情。
实际上,您自己永远不会/etc/rc*.d/接触(或)中的文件/etc/rc.d/rc*.d/;您始终使用该工具(例如update-rc.d、ntsysv、chkconfig)进行任何更改。
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |