재부팅 중 모니터링

재부팅 중 모니터링

다시 시작 또는 종료 시퀀스 중에 monit을 사용할 때 문제를 발견했습니다. 먼저, monit의 구성 배경을 소개하겠습니다.

  1. 모니터링 버전은 5.5입니다.
  2. Monit은 inittab에서 null::respawn:/usr/bin/monit –Ic /etc/monitrc로 시작합니다.
  3. Monit은 30초마다 서비스를 확인하도록 구성되어 있습니다.
  4. Monit은 특정 사용자 정의 애플리케이션을 모니터링하고, 실행 중이 아닌 경우 해당 특정 사용자 정의 애플리케이션의 init 스크립트를 호출하여 다시 시작합니다.
  5. 응용 프로그램은 부팅 시 시작되는 /etc/init.d/ 폴더에 자체 초기화 스크립트를 가지고 있습니다. Monit은 inittab에서 이러한 init 스크립트가 실행된 후에 시작됩니다.

이제 문제를 해결하려면 다음을 수행하십시오.

시스템 종료/다시 시작 중에 모든 서비스 모니터링을 중지하기 위해 먼저 monit에 명령이 전송됩니다. 그런 다음 /etc/init.d/의 모든 종료 스크립트가 호출됩니다. 대부분의 경우 작동하지만 애플리케이션이 이미 정상적으로 닫혔을 때 monit이 애플리케이션을 시작하는 극단적인 경우가 있는데 이는 잘못된 것입니다. 아래 시퀀스 다이어그램에서 문제를 포착하려고합니다.

타이밍 다이어그램

monit 소스 코드를 살펴보니 서비스 검사가 실패하면 monit이 언급된 명령을 분기하여 실행하려고 시도하는 것 같습니다. 따라서 monit이 unmonitor 명령을 수신하면 분기된 프로세스가 계속 진행될 수 있습니다. monit은 이 명령을 받았을 때 시작된 프로세스를 중지하지 않고 즉시 반환하는 것으로 보입니다.

monit에 의해 시작된 모든 하위 프로세스가 완료될 때까지 기다리는 방법이 있습니까?

이 문제를 피하기 위한 다른 제안 사항이 있습니까?

관련 정보