여기서 내 질문은 basic.target
CentOS 7 서버를 시작할 때 어떤 일이 발생하는지 이해하는 것입니다.
나는 Systemd에 대해 내가 알고 있는 것이 정확하다고 생각합니다.
Requires=unit2
즉, 일부는 모두 성공한 경우에만 활성화됩니다unit1
.unit2
Wants=unit2
unit1
나열된 Unit2의 성공 여부에 관계없이 일부가 활성화됨을 나타냅니다 .After=unit2
unit1
일부는 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
이제 내 설명은 다음과 같습니다.
basic.target
만 활성화됩니다뒤쪽에sysinit.target
이미 성공또한, 달릴
basic.target
수 있기를 바랍니다 .sockets.target
추가
After=
수단은 , , 활성화 후에basic.target
활성화 해 주세요 . 실패해도 괜찮습니다.sockets.target
paths.target
slices.target
timers.target
그렇다면 두 가지를 하나로 결합해 보는 것은 어떨까요
After=
? ( 제외 )Require=
대신 사용하지 않는 이유는 무엇입니까 ?Wants
timers.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.target
basic.target
Wants=
Requires=
After=
반면에 시작 순서만 지정됩니다.
합이 some.service
없는 경우를 고려하십시오 . 그러나 시스템에서는 그렇지 않습니다 . 누락된 항목을 무시하고 정상적으로 시작 됩니다 . 시스템에 있지만 시작할 수 없으면 시작 하려고 기다린 다음 어쨌든 시작합니다.After=postres.service
Wants=
Requires=
postgres.service
some.service
postres.service
postres.service
some.service
postres.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.service
After=postres.service
postres.service
some.service
이것이 다른 서비스를 시작하기 전에 한 서비스가 성공적으로 시작되었는지 확인하려는 경우 일반적으로 및 를 모두 사용하는 이유입니다 Requires=
.After=