시스템 서비스가 "활성화"된다는 것은 정확히 무엇을 의미합니까?

시스템 서비스가 "활성화"된다는 것은 정확히 무엇을 의미합니까?

문서의 다양한 용어에 따르면 "활성" 상태는 비활성 상태와 활성 상태 사이의 전환입니다. 지금까지는 분명합니다.

그러나 그것은 어떻게 정의됩니까?
서비스가 더 이상 비활성 상태가 아니고 활성화되는지 여부는 어떻게 결정됩니까?
서비스가 더 이상 활성 상태가 아니지만 활성화되었는지 여부는 어떻게 결정됩니까?

내가 아는 유일한 "활성" 상태는 스크립트가 ExecStartPre실행될 때 서비스가 "활성" 상태를 유지한다는 것입니다.

서비스를 활성 상태로 유지하는 다른 방법이 있나요?

서비스가 기본 서비스를 시작하도록 할 수 있지만 ExecStart실행 파일이 특정 "일어났어요!"를 발생시키는 경우에만 활성 상태로 간주할 수 있습니다. 이벤트 같은 거요?

답변1

실행되는 동안 서비스는 "활성" 상태로 유지됩니다.

이는 잘못된 서비스 파일을 사용하고 있음을 나타냅니다 Type=. 어떤 서비스가 언제 시작되는지에 대한 자세한 내용은 man systemd.unit및를 참조하세요. systemd.service여기에 복사하여 붙여넣기에는 텍스트가 너무 길지만 다음 Type=설명을 따르세요 man systemd.service.

Type=

서비스 시작이 완료되었음을 서비스가 관리자에게 알리는 메커니즘을 구성합니다. 단순, 실행, 분기, 원샷, dbus, 알림, 알림-재로드 또는 유휴 중 하나:

  • (기본값이 지정되었지만 simple둘 다 지정되지 않은 경우)로 설정된 경우 서비스 관리자는 기본 서비스 프로세스가 분기된 후(즉, 다양한 프로세스 속성을 구성한 후 이전이 이전임) 새 프로세스가 즉시 시작되는 것으로 간주합니다. 실제 서비스 바이너리를 호출하기 위해 호출되었습니다). 종종 이것이 더 나은 옵션입니다. 아래를 참조하십시오.ExecStart=Type=BusName=fork()execve()Type=exec
  • 유형 exec은 단순과 비슷하지만 서비스 관리자는 기본 서비스 바이너리가 실행된 후 즉시 해당 단위가 시작되는 것으로 간주합니다. [...]
  • 로 설정하면 forking관리자는 관리자가 분기한 바이너리가 종료된 후 즉시 장치가 시작되는 것으로 간주합니다. 이 유형의 사용은 권장되지 않습니다 notify. 대신 notify-reload, 또는 dbus[...]을 사용하십시오.
  • 동작 oneshot은 와 유사 simple하지만 서비스 관리자는 기본 프로세스가 종료된 후 장치를 고려합니다. […]

[...그리고 버스/알림 기반 체계...]

따라서 서비스가 "활성화"에서 "활성"으로 전환되는 지점은 설정 방법에 따라 다릅니다. 그러나 "활성화"는 항상 동일한 지점, 즉 시스템이 서비스 파일에 지정된 작업을 수행하기 시작하는 순간부터 시작됩니다.

관련 정보