오랫동안 실행되는 systemd 서비스가 있습니다. 이를 이라고 부르겠습니다 db.service
. 시스템 시작 시 시작할 수 있지만 수동으로 다시 시작할 수도 있습니다.
또한 데이터베이스 파일에 대한 무결성 검사를 수행하는 oneshot
서비스(이렇게 부르겠습니다) 도 있습니다 .check.service
check.service
시스템 시작 시 실행되어야 하며 시작 중에 db.service
실패하면 시작되어서는 안 됩니다 check.service
.
하지만! 여기에 경고가 있습니다. check.service
수동 요약을 사용할 때는 실행하면 안 됩니다. 시동이 실패하더라도 수동으로 시동이 가능해야 합니다.db.service
systemctl restart db.service
db.service
check.service
질문
systemd 서비스를 사용하여 이를 달성할 수 있는 방법이 있습니까?
생각과 관찰
RequiredBy=db.service
in 을 사용하면 이를 달성 할 수 있다고 생각합니다check.service
. 하지만check.service
시작 시에는 여전히 트리거됩니다.db.service
db-boot.service
부팅db.service
및check.service
. 그러나 나는 방법을 알 수 없었습니다.
답변1
당신은 와 함께 check.service
있어야 하고 , 또한 있어야 하고 주문 해야 합니다.Type=oneshot
RemainAfterExit=yes
WantedBy=db.service
Before=db.service
그런 다음 시작 시(또는 데이터베이스가 시작 시 시작되도록 구성되지 않은 경우 데이터베이스가 처음 시작되기 전) 완료될 때까지 실행하고 상태를 check.service
유지합니다 . active (exited)
따라서 db.service
다시 시작 하면 check.service
이미 활성화되어 있고 종속성이 충족되므로 check.service
다시 시작되지 않습니다.
이 설정을 사용하면 check.service
부팅에 실패 하면 db.service
부팅되지 않습니다(그러나 Want
종속성이 대신 사용되기 때문에 Require
시스템의 나머지 부분은 패닉 모드로 전환되지 않고 정상적으로 부팅됩니다). 이후에 수동으로 시작 하는 경우 먼저 성공적으로 실행 db.service
해야 합니다 . 성공적으로 실행한 후에는 마음대로 시작하고 중지할 수 있습니다.check.service
check.service
db.service
실패 시 수동으로 시작할 db.service
수 있어야 하는 경우 자동으로 전혀 시작되지 않도록(예: ) 구성하고 대신 에서 시작하도록 구성할 수 있습니다 .check.service
db.service
systemctl disable db.service
WantedBy=db.service
check.service
check.service
sudo systemctl start db.service
만약에 그리고 만약에확인에 성공했습니다.
이렇게 하면 수동 시작 시 실행해야 하는 종속성 이 check.service
없지만 데이터베이스는 검사가 성공한 경우(아마도 시작 시)에만 자동으로 시작됩니다.db.service
check.service