systemd는 여전히 런레벨에 대해 알고 있습니까?


17

systemd에 여전히 런레벨 개념이 있습니까? 예를 들어 무의미 telinit <number>합니까?



나는 아래의 답변에 대해 알고 있지만, RHEL에서 /를 CentOS 7.6하지 init 1init 3init 5init 6init 0runlevel여전히 그들은 항상 가지고 행동하고, 그게 내가 걱정하는 전부입니다. 훨씬 쉬운 구문systemctl blabla blabla.blabla
ron

답변:


14

SystemD 런레벨 로우 다운

SystemD (aemon) 내에서 런레벨은 "타겟"으로 노출됩니다. 개념은 여전히 ​​존재하지만 요구 사항에 대한 원하는 결과를 생성하는 워크 플로는 다릅니다.

첨부 된이 문제를 명확히해야합니다.

현재 런레벨을 어떻게 변경합니까?

$ systemctl isolate runlevelX.target

다음 부팅을위한 기본 런레벨을 어떻게 변경합니까?

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -s 심볼릭 링크를 만듭니다
  • -f 기존 대상 파일을 제거합니다

또는 @centimane이 제안한대로 간단히 "blessed" systemd명령을 사용하십시오 .

systemctl set-default [target name].target

현재 런레벨을 어떻게 식별합니까?

$ systemctl list-units --type=target

여전히 init 명령을 사용하여 런레벨을 전환 할 수 있습니까?
drpaneas

2
시스템 패키지가 SysV compat 지원으로 구축 된 경우, 시스템 바이너리에 대한 telinit 심볼릭 링크가 포함됩니다. telinit로 호출 될 때 런레벨 0-6을 시스템 대상에 매핑합니다. telinit (8)에서 해당 매핑 목록을 확인하십시오. .
Wieland

2
기본 대상을 변경하려면 systemctl set-default [target name].target링크를 수동으로 생성하는 대신 사용해야합니다 .
Centimane

13

아닙니다. 체계화 된 사람들이 스스로 telinit매뉴얼에 한 번, 매뉴얼에 한 번, 두 번이나 쓴 것처럼 runlevel런레벨은 "폐기"되었습니다. 런레벨을 잊을 수 있습니다.

이러한 것들은 몇 가지 호환성 심을 제외하고는 실제로 시스템에 존재하지 않습니다.

  • 대상 이름에 대한 일부 심볼릭 링크가 있지만 이러한 대상은 실제로 시스템에 의해 사용되지 않습니다.
    • 오히려, 부트 스트랩 프로세스는 a default.target(및 a graphical.target및 a 중 하나 또는 둘 다 multi-user.target), a rescue.target또는 a 를 사용합니다 emergency.target. 종료 프로세스에는 shutdown.target, a reboot.target, a halt.target또는 a가 포함 poweroff.target됩니다. 실행 레벨 대상이 없습니다.부트 스트랩 또는 종료에 .
    • telinit하나가 사용 호환성 심볼릭 링크가 명령 줄 인수를 매핑 할 생각 명령은, 그 중 하나를하지 않습니다. 거기의 소스 코드에 하드 와이어드 테이블의 telinit프로그램, 그리고 숫자가 2, 3, 4, 및 5명령에 대한 인수가 내장 돼있다로 매핑 multi-user.target하고graphical.target .
    • systemd-update-utmp 내부 하드 와이어 테이블도 있습니다.
  • 런레벨 항목에는 "초기 테이블"이 없습니다. systemd는 반 Smoorenburg이 만듦 만 호환 rc되지 반 Smoorenburg이 만듦으로, init.
  • systemd 자체에서 유지 관리하는 "현재 실행 수준"값이 없습니다. 오히려, 거의 전적으로 문서화되지 않은 systemd-update-utmp명령의 활성화 상태의 측면에서 내부적으로 작동 rescue.target, multi-user.targetgraphical.target .
  • systemd-sysv-generatorsystemd의 이전 버전과의 호환성 서비스 단위 생성기는 /etc/rc[234].d디렉토리를 생성 된 서비스 단위와 하나의 Wanted-By관계 로 병합합니다 multi-user.target. 생성 된 서비스 단위의 실행 레벨에 대한 실제 참조는 없습니다. (몇 년 전부터 있었지만, 체계화 된 사람들은 다른 곳에서 참조되지 않았기 때문에 이것이 잘못되었다는 것을 발견했습니다.)

"init 0``이 아치 설치에서"초과 인수 "를 유발하는 이유는 무엇입니까? "에서 질문자에 대해 아치 리눅스처럼 systemd를 빌드하는 시스템의 사용자라면 , 호환성 심 (shim)과 같은 명령도 얻지 못합니다. 같은 init 0명령이 잘못 호출 된 것을 불평하는 것입니다 "기본"systemd 행동의 결과.

추가 자료


4

매우 감사합니다. 따라서 내가 올바르게 이해하면 :

예를 들면 다음과 같습니다.

ls -ll /usr/lib/systemd/system/runlevel*.target

산출:

/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target

보시다시피, 런레벨의 개념은 존재하지만 runlevel.target 파일은 실제로“실제”파일이 아니라 새롭고 현대적이고 더 나은 이름의 파일 체계에 대한 소프트 링크라는 사실 때문에 상당히 쓸모가 없습니다. systemd는이를 "대상"이라고 부릅니다.

그래서, 당신이 sth를하고 싶다면 다음과 같을 telinit 5것입니다 systemctl isolate runlevel5.target : systemctl isolate graphical.target(내 의견으로는 권장).

가능한 모든 대상을 알고 싶은 경우 :

ls /usr/lib/systemd/system/*.target

네, 당신이 이것을 올바르게 이해하고 있다고 믿습니다. 절차 적, 단계적 단계, INIT.D 시스템이 내가 가장 친숙한 것이므로 SystemD를 늦게 채택 할 것입니다. SystemD의 가장 큰 장점은 병렬 멀티 스레딩으로 부팅 속도가 더 빠릅니다. 다중 스레드 부팅은 INIT.D를 사용하여 수행 할 수 있지만 강력한 BASH 스크립팅이 필요합니다.
Tyler Maginnis

BTW ls -ll는에 해당합니다 ls -l. 를 사용하는 습관을 갖고 싶을 수도 있습니다 ls -ld.
G-Man, 'Reinstate

telinit 0/ telinit 6여전히 작동합니다. 이는 마이그레이션에 도움이되므로 대부분의 배포판에서는 여전히 지원을 중단 할 이유가 없다고 생각합니다. isolate달리기 수준의 작동 방식을 모방하기 위해 분명히 열망했지만 다양한 악의적 인 사례가 있습니다. 모든 지침을 무시 isolate runlevel5.target하거나 무시하는 것이 좋습니다 isolate graphical.target. 에지 사례의 예 : github.com/systemd/systemd/issues/6505
sourcejedi

0

systemd는 sysV init 시스템의 런레벨 에 대응하는 대상 을 도입했습니다 . sytemd 개발자는 대부분의 sysV 스크립트와 거의 호환됩니다. 에 대해서도 마찬가지입니다 . 이것은 시스템에 상응하는 것으로 번역됩니다.telinit <runlevel>

예를 들어 telinit 0기계의 전원을 끕니다. systemd에는 runoff 0 과 동일한 poweroff.target 이 있습니다. 그래서 telinit 0활성화에 systemd에 의해 번역됩니다 poweroff.target .

그러나 일부 호환성 문제는 sytemd 및 sysV init 시스템-> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities 와 관련이 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.