다른 서비스가 시작되는 동안 일부 서비스를 일시적으로 중지합니다.

다른 서비스가 시작되는 동안 일부 서비스를 일시적으로 중지합니다.

두 가지 서비스가 있습니다. 하나는 핵심 서비스이고 다른 하나는 본질적으로 핵심 서비스를 감독하는 서비스입니다. 수명주기는 다음과 같이 지정됩니다.

  • 모니터링 서비스는 핵심 서비스가 시작될 때 시작되어야 합니다.
  • 핵심 서비스가 실패하더라도 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가 다시 시작할 것으로 예상됩니다.coreWantsBefore하지만 그런 일은 일어나지 않았어.

무엇하다효과가 있었던 것은 지시어에서 수동으로 다시 시작하는 것이었습니다 ExecStartPost.

[Unit]
Description=Some Core Service

[Service]
Type=forking
ExecStart=/some/core/executable
ExecStartPre=+systemctl stop overwatch.service
ExecStartPost=+systemctl start overwatch.service

# ...

하지만 더 좋은 방법이 있는지 궁금합니다. 다른 서비스를 수동으로 중지하고 시작하기 위해 사전 및 사후 시작 후크를 사용하는 것보다 권장되는 설명 방식으로 내 요구 사항을 표현하는 것이 더 좋습니다.

관련 정보