다른 프로세스가 실행 중인지 확인하는 프로세스? [복사]

다른 프로세스가 실행 중인지 확인하는 프로세스? [복사]

저는 현재 고객의 집에 컴퓨터를 배포하고 있습니다.

다음 스크립트를 실행하고 있습니다.

  1. ngrok(ssh 정방향 터널 데몬)
  2. heartbeat.py(컴퓨터가 활성 상태인지 확인하기 위해 하트비트 신호를 로그로 보내는 스크립트)
  3. metrics.py(모든 환경 데이터(예: 온도, 디스크 공간)를 loggly에 기록하는 스크립트)

따라서 지금까지의 테스트에서metric.py는 약간 불안정합니다(가끔 충돌함을 의미함).

*NIX에 다음을 수행하는 패키지가 있습니까?

  1. 프로세스가 X초마다 실행되는지 확인
  2. # 1이 true가 아닌 경우 실행하십시오.
  3. 프로세스 목록에 대해 다음을 수행하십시오.

답변1

내가 그것을 싫어하는 만큼 systemd, 그것이 확실히 효과가 있다는 것을 인정해야 합니다.

모든 init시스템이 실패한 프로세스의 자동 재시작을 지원하는 것은 아닙니다.

그러나 프로세스가 여전히 "실행 중"인지 확인하는 것은 수행할 수 있는 가장 기본적인 상태 확인일 뿐입니다. 프로그램의 메인 루프가 "살아있나요?"를 확인할 수 있다면 더 좋을 것입니다. 메시지를 남겨 답장을 보내세요. 그러면 무한 루프에 갇히거나 완료할 수 없는 I/O를 기다리는 것이 멈춘 것이 아니라는 것을 알 수 있습니다.

답변2

아마도 간단한 스크립트가 도움이 될 수 있습니다.

ps -axu | grep '[n]grok' 2>&1 1>/dev/null || bash -c "ngrok"

위 스크립트는 실행 상태를 확인하고 ngrok, 실행 중이 아니면 명령을 실행하여 시작합니다. 명령의 괄호는 grepgrep 명령 자체의 결과를 필터링하는 데 도움이 됩니다.

이것을 cron구성 파일에 추가하면 정기적으로 확인됩니다.

노트:

확인하고 다시 시작하는 사이에 약간의 지연 시간을 추가하고, ngrok심각한 문제가 발생하여 다시 시작할 수 없게 되는 것을 방지하기 위해 재시도 한도를 설정할 수도 있습니다.

관련 정보