문서의 다양한 용어에 따르면 "활성" 상태는 비활성 상태와 활성 상태 사이의 전환입니다. 지금까지는 분명합니다.
그러나 그것은 어떻게 정의됩니까?
서비스가 더 이상 비활성 상태가 아니고 활성화되는지 여부는 어떻게 결정됩니까?
서비스가 더 이상 활성 상태가 아니지만 활성화되었는지 여부는 어떻게 결정됩니까?
내가 아는 유일한 "활성" 상태는 스크립트가 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
하지만 서비스 관리자는 기본 프로세스가 종료된 후 장치를 고려합니다. […][...그리고 버스/알림 기반 체계...]
따라서 서비스가 "활성화"에서 "활성"으로 전환되는 지점은 설정 방법에 따라 다릅니다. 그러나 "활성화"는 항상 동일한 지점, 즉 시스템이 서비스 파일에 지정된 작업을 수행하기 시작하는 순간부터 시작됩니다.