시스템에 런레벨 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
답변1
시스템에 런레벨 3으로 이동하라고 지시하면 먼저 런레벨 0, 1, 2를 실행한 다음 마지막으로 런레벨 3을 실행한다는 의미입니까?
아니요, 그렇지 않습니다. 이런 식으로 런레벨은 연속적이지 않습니다.
삽화:실행 레벨 0일반적으로 모든 서비스를 중지하고 궁극적으로 시스템을 중지(종료할 수도 있음)하는 "종료" 실행 수준입니다. 완전히 작동하는 시스템을 얻기 위해 init가 먼저 실행 레벨 0에 진입했다면 좋지 않을 것입니다.
즉,대개ㅏ진전이 기간 동안부팅 프로세스. 커널은 런레벨 1에서 초기화된 다음 제어권을 init로 전달합니다. init는 일반적으로 런레벨 2(네트워킹이 없는 다중 사용자), 그 다음 런레벨 3(완전히 작동하는 텍스트 모드), 그리고 가능하면 런레벨 5(완전히 작동하는 그래픽 모드)로 들어가도록 구성됩니다. ). 그러나 이는 실제로 완전히 구성 가능하며, 어떤 런레벨로 들어가는지에 대한 세부 사항은 대부분 관례에 따릅니다. 예를 들어, 적어도 과거에는 Debian이 완전한 작동 그래픽 모드를 위해 런레벨 4를 사용했고, 내 Debian Wheezy에서는 런레벨 2와 3이 동일한 것처럼 보입니다( diff <(ls /etc/rc2.d) <(ls /etc/rc3.d)
아무 것도 출력되지 않습니다). 각 실행 수준에 해당하는 내용은 관리자가 결정합니다.
또한 일반적으로 실행 수준 6은 시스템을 재부팅하도록 설정됩니다. 특히 운영 체제가 제대로 시작되지 않는 경우 시스템 유지 관리 중에 실행 수준 1에서 실행 수준 6으로 직접 이동할 수 있습니다.
Linux가 아닌 시스템에서는 다양한 런레벨의 목적에 대해 서로 다른 생각을 갖고 있거나 사용 가능한 런레벨 수가 다를 수 있다는 점도 주목할 가치가 있습니다. 이 개념은 *nix 세계에서는 거의 보편적일 수 있지만 구현 및 실제 사용은 매우 다양할 수 있습니다.
전체적으로 "런레벨"은 관련 프로세스와 시스템 상태를 관리자가 선택할 수 있는 관리 가능한 패키지로 그룹화하는 편리한 방법일 뿐입니다. (BTW, Windows 비상 안전 모드, 네트워크 비상 안전, 명령 프롬프트 비상 안전, 정상 시작 등은 매우 유사한 개념을 가지고 있습니다.)
답변2
런레벨을 전환하면 실행되는 유일한 것은 /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