추가 읽기

추가 읽기

systemd에는 여전히 런레벨 개념이 있습니까? 예를 들어, 을 사용하는 것이 의미가 있지 않습니까 telinit <number>?

답변1

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

답변2

아니요. 시스템을 갖춘 사람들이 두 번, 즉 매뉴얼에 한 번 telinit, 매뉴얼에 한 번 썼듯이 runlevel런레벨은 "구식"입니다. 런레벨은 잊어도 됩니다.

일부 호환성 심을 제외하면 이러한 것들은 실제로 systemd에 전혀 존재하지 않습니다.

  • 일부 대상 이름에 대한 심볼릭 링크가 있지만 이러한 대상은 실제로 systemd에서 사용되지 않습니다.
    • 대신 부팅 프로세스에서는 a(및 default.targeta와 a 중 하나 또는 둘 다), a 또는 an을 사용합니다. 종료 프로세스에는 , a , a 또는 a가 포함됩니다. graphical.targetmulti-user.targetrescue.targetemergency.targetshutdown.targetreboot.targethalt.targetpoweroff.target관련된 실행 수준 대상이 없습니다.부팅 또는 종료 중.
    • 명령이 호환성 심볼릭 링크를 사용하여 명령줄 인수를 매핑 한다고 생각할 수도 있지만 telinit그렇게 하지 않습니다. 프로그램의 소스 코드에는 고정 배선된 테이블이 있으며 명령에 대한 인수인 telinit숫자 2, 34는 및 에 매핑되도록 고정 배선되어 있습니다 .5multi-user.targetgraphical.target
    • systemd-update-utmp내부에 고정 배선된 테이블도 있습니다.
  • 실행 수준 콘텐츠에는 "초기화 테이블"이 없습니다. systemd는 van Smoorenburg 와만 호환되고 rcvan Smoorenburg 와는 호환되지 않습니다 init.
  • systemd 자체는 "현재 실행 수준" 값을 유지하지 않습니다. 대신, 거의 완전히 문서화되지 않은 systemd-update-utmp명령은 , 및 의 활성화 상태에 따라 rescue.target내부적으로 multi-user.target실행됩니다 graphical.target.
  • systemd-sysv-generator, 디렉토리를 생성된 서비스 단위와 /etc/rc[234].d고유한 관계로 병합하는 systemd용 이전 버전과 호환되는 서비스 단위 생성기입니다 Wanted-By. multi-user.target생성된 서비스 단위에는 런레벨에 대한 실제 참조가 없습니다. (몇 년 전에도 이런 일이 있었지만, 다른 곳에서 참조되지 않았기 때문에 시스템 사람들은 이것이 잘못된 것임을 발견했습니다.)

질문자가 "Arch Linux"에서 했던 것처럼 systemd가 빌드된 시스템의 사용자라면Arch 설치 중에 `init 0`으로 인해 "초과 매개변수"가 나타나는 이유는 무엇입니까?", 사람들은 호환성 심도 얻지 못하고 이와 같은 명령은 init 0명령이 잘못 호출되었다고 불평하는 "기본" 시스템 동작으로 이어집니다.

추가 읽기

답변3

매우 감사합니다. 따라서 내가 올바르게 이해했다면 다음과 같습니다.

예를 들어:

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는 이를 "대상"이라고 부르기를 좋아합니다.

따라서 다음과 같은 작업을 수행하려는 경우 telinit 5다음과 같습니다. (제 생각에는 권장됨) systemctl isolate runlevel5.target .systemctl isolate graphical.target

가능한 모든 목표에 대해 알아보고 싶다면:

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

답변4

도입된 시스템표적상대방으로서런레벨sysV 초기화 시스템에서. sytemd 개발자는 대부분의 sysV 스크립트와 거의 호환되도록 만들었습니다. 에서도 마찬가지입니다 telinit <runlevel>. 이것은 systemd로 변환됩니다.

예를 들어, telinit 0기기의 전원을 끄십시오. 시스템은정전 대상같은 일을실행 레벨 0. 그래서 telinit 0시스템 번역에 의해 활성화됩니다정전 대상.

그러나 sytemd와 sysV init 시스템 사이에는 몇 가지 호환성 문제가 있습니다. ->https://www.freedesktop.org/wiki/Software/systemd/Incompatibility.

관련 정보