출시 후 Systemd basic.target에 대해 알아보기

출시 후 Systemd basic.target에 대해 알아보기

여기서 내 질문은 basic.targetCentOS 7 서버를 시작할 때 어떤 일이 발생하는지 이해하는 것입니다.

나는 Systemd에 대해 내가 알고 있는 것이 정확하다고 생각합니다.

  • Requires=unit2즉, 일부는 모두 성공한 경우에만 활성화됩니다 unit1.unit2

  • Wants=unit2unit1나열된 Unit2의 성공 여부에 관계없이 일부가 활성화됨을 나타냅니다 .

  • After=unit2unit1일부는 Unit2가 활성화된 후에만 활성화된다는 의미입니다 .

  • Systemd의 작업은 일반적으로 병렬로 시작됩니다.

  • .target주로 "그룹화" 및 "정렬"에 사용됩니다(참조systemd.target)

  • 실제로 (서버의 기본 런레벨인) basic.target(그리고 필요하고 원하는 모든 것) 에 도달하기 전에 활성화해야 합니다.multi-user.target

글쎄요, 지금까지는 제가 옳았기를 바랍니다.


이제 다음을 찾으세요 basic.target.

$ sudo cat /usr/lib/systemd/system/basic.target

[Unit]
Description=Basic System
Documentation=man:systemd.special(7)

Requires=sysinit.target
After=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
After=sockets.target paths.target slices.target

이제 내 설명은 다음과 같습니다.

  1. basic.target만 활성화됩니다뒤쪽에 sysinit.target이미 성공

  2. 또한, 달릴 basic.target수 있기를 바랍니다 .sockets.target

  3. 추가 After=수단은 , , 활성화 후에 basic.target활성화 해 주세요 . 실패해도 괜찮습니다.sockets.targetpaths.targetslices.targettimers.target

  4. 그렇다면 두 가지를 하나로 결합해 보는 것은 어떨까요 After=? ( 제외 ) Require=대신 사용하지 않는 이유는 무엇입니까 ?Wantstimers.target

답변1

4번 항목의 질문이 눈에 띄고 나머지는 배경으로 사용됩니다.

왜 둘을 After=하나로 결합하지 않습니까?

After=두 지침의 결합을 방해하는 기술적인 이유는 없습니다 . , 및 의 단위 순서는 중요 After=하지 않습니다. 다른 파일(예: 오버레이)에서 가져올 수도 있으며 검사를 위해 세트에 추가될 수도 있습니다. 따라서 병합 여부는 템플릿의 가독성 및 사용 용이성과 같은 요소를 기반으로 결정될 수 있습니다.Wants=Requires=

( 제외 ) Require=대신 사용하지 않는 이유는 무엇입니까 ?Wants=timers.target

대상 시작을 트리거하지만 basic.target일부 종속 대상이 실패하더라도 실패하지 않습니다.

이는 반대이며 Requires=sysinit.target, 시작을 트리거 sysinit.target하고 실패 시 basic.target실패합니다 sysinit.target.

종속 장치의 시작을 트리거 Requires=합니다 .Wants=

(이것은 그들의 욕구와 필요를 유발하여 나무 아래로 계단식으로 내려갑니다). 차이점은 필요한 서비스가 시작되지 않는 경우 발생하는 것입니다. 서비스가 없거나 시작하지 못하는 경우 Requires=해당 서비스에 대한 모든 서비스도 시작되지 않습니다. 그러나 Wants=실패한 서비스는 계속 시작됩니다. 예를 들어 현재 구성에서 어떤 이유로든 실패하는 경우 을 paths.target사용하여 계속 액세스할 수 있지만 을 사용하면 액세스할 수 없습니다.slices.targetbasic.targetWants=Requires=

After=반면에 시작 순서만 지정됩니다.

합이 some.service없는 경우를 고려하십시오 . 그러나 시스템에서는 그렇지 않습니다 . 누락된 항목을 무시하고 정상적으로 시작 됩니다 . 시스템에 있지만 시작할 수 없으면 시작 하려고 기다린 다음 어쨌든 시작합니다.After=postres.serviceWants=Requires=postgres.servicesome.servicepostres.servicepostres.servicesome.servicepostres.service

활성화 여부는 중요하지 않습니다 some.service. 활성화하지 않은 경우 수동으로 시작하면 시작을 시도하지 않고 시작됩니다 postres.service.

Requires=postres.service또는 를 추가 Wants=postres.service하면 some.service어떤 방식으로든 시작될 때에도 시작됩니다 postres.service. some.service그렇다면 시작 오류 postres.service로 인해 시작 오류 Requires=도 발생합니다 .some.service

Requires=없이 지정하면 After=완전히 확실하지 않습니다. 내 생각에는 systemd동시에 시작될 것이며 실패해도 postres.service아무런 영향을 미치지 않을 것입니다.

** 하지만 경우가 있을 것이라고 확신합니다. 단순히 없이 some.service지정했는데 시스템에 이 항목 이 없으면 부팅 시도가 실패합니다.Requires=postres.serviceAfter=postres.servicepostres.servicesome.service

이것이 다른 서비스를 시작하기 전에 한 서비스가 성공적으로 시작되었는지 확인하려는 경우 일반적으로 및 를 모두 사용하는 이유입니다 Requires=.After=

관련 정보