두 가지 서비스가 있습니다. 하나는 핵심 서비스이고 다른 하나는 본질적으로 핵심 서비스를 감독하는 서비스입니다. 수명주기는 다음과 같이 지정됩니다.
- 모니터링 서비스는 핵심 서비스가 시작될 때 시작되어야 합니다.
- 핵심 서비스가 실패하더라도 Overwatch 서비스는 활성 상태로 유지되어야 합니다.
core
이러한 제약 조건을 두 개의 시스템 서비스로 구현하는 것은 두 개의 별도 서비스를 만들고 시작하는 것만큼 간단합니다 overwatch
.
core.service
[Unit]
Description=Some Core Service
Wants=overwatch.service
[Service]
Type=forking
ExecStart=/some/core/executable
# ...
overwatch.service
[Unit]
Description=Some Overwatch Service
[Service]
Type=simple
ExecStart=/some/overwatch/executable
# ...
그러나 나는또 다른 제한: 시작 core
중에는 overwatch
서비스를 활성화할 수 없습니다 . 내가 시도한 해결책은 overwatch
시작하기 직전에 중지했다 core
가 다시 시작하는 것이었습니다 overwatch
. 이를 위해 다음과 같이 서비스에 ExecStartPre
지시문을 Before
추가해 보았습니다 core
.
[Unit]
Description=Some Core Service
Wants=overwatch.service
Before=overwatch.service
[Service]
Type=forking
ExecStart=/some/core/executable
ExecStartPre=+systemctl stop overwatch.service
# ...
이제 overwatch
죽어도 여전히 살아있지만 core
다시 시작하기 전에 성공적으로 중지됩니다. 그러나 및 지시문으로 인해 core
성공적인 시작 후에도 systemd가 다시 시작할 것으로 예상됩니다.core
Wants
Before
하지만 그런 일은 일어나지 않았어.
무엇하다효과가 있었던 것은 지시어에서 수동으로 다시 시작하는 것이었습니다 ExecStartPost
.
[Unit]
Description=Some Core Service
[Service]
Type=forking
ExecStart=/some/core/executable
ExecStartPre=+systemctl stop overwatch.service
ExecStartPost=+systemctl start overwatch.service
# ...
하지만 더 좋은 방법이 있는지 궁금합니다. 다른 서비스를 수동으로 중지하고 시작하기 위해 사전 및 사후 시작 후크를 사용하는 것보다 권장되는 설명 방식으로 내 요구 사항을 표현하는 것이 더 좋습니다.