시작 시에만 서비스 종속성을 실행하는 방법은 무엇입니까?

시작 시에만 서비스 종속성을 실행하는 방법은 무엇입니까?

오랫동안 실행되는 systemd 서비스가 있습니다. 이를 이라고 부르겠습니다 db.service. 시스템 시작 시 시작할 수 있지만 수동으로 다시 시작할 수도 있습니다.

또한 데이터베이스 파일에 대한 무결성 검사를 수행하는 oneshot서비스(이렇게 부르겠습니다) 도 있습니다 .check.service

check.service시스템 시작 시 실행되어야 하며 시작 중에 db.service실패하면 시작되어서는 안 됩니다 check.service.

하지만! 여기에 경고가 있습니다. check.service수동 요약을 사용할 때는 실행하면 안 됩니다. 시동이 실패하더라도 수동으로 시동이 가능해야 합니다.db.servicesystemctl restart db.servicedb.servicecheck.service

질문

systemd 서비스를 사용하여 이를 달성할 수 있는 방법이 있습니까?

생각과 관찰

  • RequiredBy=db.servicein 을 사용하면 이를 달성 할 수 있다고 생각합니다 check.service. 하지만 check.service시작 시에는 여전히 트리거됩니다.db.service

  • db-boot.service부팅 db.servicecheck.service.​ 그러나 나는 방법을 알 수 없었습니다.

답변1

당신은 와 함께 check.service있어야 하고 , 또한 있어야 하고 주문 해야 합니다.Type=oneshotRemainAfterExit=yesWantedBy=db.serviceBefore=db.service

그런 다음 시작 시(또는 데이터베이스가 시작 시 시작되도록 구성되지 않은 경우 데이터베이스가 처음 시작되기 전) 완료될 때까지 실행하고 상태를 check.service유지합니다 . active (exited)따라서 db.service다시 시작 하면 check.service이미 활성화되어 있고 종속성이 충족되므로 check.service다시 시작되지 않습니다.

이 설정을 사용하면 check.service부팅에 실패 하면 db.service부팅되지 않습니다(그러나 Want종속성이 대신 사용되기 때문에 Require시스템의 나머지 부분은 패닉 모드로 전환되지 않고 정상적으로 부팅됩니다). 이후에 수동으로 시작 하는 경우 먼저 성공적으로 실행 db.service해야 합니다 . 성공적으로 실행한 후에는 마음대로 시작하고 중지할 수 있습니다.check.servicecheck.servicedb.service


실패 시 수동으로 시작할 db.service수 있어야 하는 경우 자동으로 전혀 시작되지 않도록(예: ) 구성하고 대신 에서 시작하도록 구성할 수 있습니다 .check.servicedb.servicesystemctl disable db.serviceWantedBy=db.servicecheck.servicecheck.servicesudo systemctl start db.service 만약에 그리고 만약에확인에 성공했습니다.

이렇게 하면 수동 시작 시 실행해야 하는 종속성 이 check.service없지만 데이터베이스는 검사가 성공한 경우(아마도 시작 시)에만 자동으로 시작됩니다.db.servicecheck.service

관련 정보