システムにランレベル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
そして/ 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
ランレベルを切り替えると、実行されるのは/etc/rc.d/rc${NEW_LEVEL}.d/
のスクリプトだけです。
これはあなたが正しいことを意味します:Everyrc*.d
ディレクトリは別のランレベルから切り替えるときにプロセス/サービスの変更のallを処理できる必要があります。したがって、すべての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
など)を使用します。
システムにランレベル3に進むように指示した場合、それは最初にランレベル0、1、2を実行し、最後にランレベル3を実行することを意味しますか?
いいえ、そうではありません。ランレベルはそのように連続していません。
適切な例:ランレベルは通常、「シャットダウン」ランレベルであり、すべてのサービスを停止し、最終的にシステムを停止します(場合によっては電源をオフにします)。完全に実行されているシステムに到達するために、initが最初にランレベル0に入った場合、それはあまり良くありません。
とは言うものの、通常aprogressionがブートプロセス。カーネルはランレベル1で初期化され、制御をinitに渡します。これは通常、ランレベル2(ネットワークのないマルチユーザー)、ランレベル3(完全に動作するテキストモード)、場合によってはランレベル5(完全に動作する)に移行するように構成されます。グラフィカルモード)。しかし、これは実際には完全に構成可能であり、どのランレベルに入るかの詳細はほとんど慣例によるものです。少なくとも過去には、Debianは完全に動作するグラフィカルモードにランレベル4を使用していたと思います。たとえば、私のDebian Wheezyでは、ランレベル2と3は同じように見えます(diff <(ls /etc/rc2.d) <(ls /etc/rc3.d)
は何も出力しません)。各ランレベルが正確に対応するのは管理者次第です。
また、慣例により、ランレベル6は通常、システムを再起動するように設定されています。たとえば、ランレベル6に直接ジャンプできます。ランレベル1、特にシステムのメンテナンス中に、OSが正常に起動できない場合。
Linux以外のシステムでは、ランレベルの目的が異なる場合や、使用可能なランレベルの数が異なる場合があることにも注意してください。この概念は* nixの世界ではほぼ普遍的ですが、実装と実際の使用法は大きく異なる可能性があります。
全体として、「ランレベル」は、関連するプロセスとシステム状態を、管理者が選択できる管理可能なバンドルにグループ化するための便利な方法です。 (余談ですが、Windowsには、フェイルセーフモード、ネットワークによるフェイルセーフ、コマンドプロンプトによるフェイルセーフ、通常の起動など、非常によく似た概念があります。)