시스템화된 서비스 단위가 있습니다.
[Unit]
After=network.target
[Service]
User=<user>
Type=forking
ExecStart=/opt/app/start.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
/opt/app/start.sh는 여러 프로세스를 시작하고 포크합니다.
for i in 1 2 3 4 5; do
bash another_script.sh &
done
bash another_script.sh
프로세스 중 하나가 0이 아닌 상태로 종료될 때까지 모든 것이 잘 작동합니다 . 이 경우 systemd 서비스를 다시 시작해야 합니다. 이런 경우 컨트롤 그룹 장애를 관찰하고 서비스를 다시 시작할 수 있는 방법이 있나요?
답변1
통제그룹은 직업이 아니다.
"통제 그룹 실패"와 같은 것은 없습니다. 제어 그룹은 단순히 리소스 제약에 사용되는 컬렉션입니다. 그들은 "실패"하지 않습니다.
여기서의 실패는 서비스를 제대로 설계하지 못한 것입니다. 여러 데몬을 모니터링해야 하고 서비스 관리자가 데몬이 종료될 때 개별적으로 다시 시작하도록 하려면 여러 서비스를 정의해야 합니다.
추가 읽기
- 조나단 데보인 폴라드(2016).Linux 제어 그룹이 작동하지 않습니다. 자주 주어지는 답변입니다.
- 조나단 데보인 폴라드(2016). "두 개의 서비스가 있는 경우 두 서비스를 모두 정의하십시오.".
systemd
공포의 집. 자주 주어지는 답변입니다.
답변2
에서 help wait
:
-n 옵션이 제공되면 다음 작업이 종료될 때까지 기다리고 종료 상태를 반환합니다.
wait -n
따라서 스크립트에서 이를 사용하여 작업이 완료되는 시기를 알 수 있어야 합니다 .