저는 현재 고객의 집에 컴퓨터를 배포하고 있습니다.
다음 스크립트를 실행하고 있습니다.
- ngrok(ssh 정방향 터널 데몬)
- heartbeat.py(컴퓨터가 활성 상태인지 확인하기 위해 하트비트 신호를 로그로 보내는 스크립트)
- metrics.py(모든 환경 데이터(예: 온도, 디스크 공간)를 loggly에 기록하는 스크립트)
따라서 지금까지의 테스트에서metric.py는 약간 불안정합니다(가끔 충돌함을 의미함).
*NIX에 다음을 수행하는 패키지가 있습니까?
- 프로세스가 X초마다 실행되는지 확인
- # 1이 true가 아닌 경우 실행하십시오.
- 프로세스 목록에 대해 다음을 수행하십시오.
답변1
내가 그것을 싫어하는 만큼 systemd
, 그것이 확실히 효과가 있다는 것을 인정해야 합니다.
모든 init
시스템이 실패한 프로세스의 자동 재시작을 지원하는 것은 아닙니다.
그러나 프로세스가 여전히 "실행 중"인지 확인하는 것은 수행할 수 있는 가장 기본적인 상태 확인일 뿐입니다. 프로그램의 메인 루프가 "살아있나요?"를 확인할 수 있다면 더 좋을 것입니다. 메시지를 남겨 답장을 보내세요. 그러면 무한 루프에 갇히거나 완료할 수 없는 I/O를 기다리는 것이 멈춘 것이 아니라는 것을 알 수 있습니다.
답변2
아마도 간단한 스크립트가 도움이 될 수 있습니다.
ps -axu | grep '[n]grok' 2>&1 1>/dev/null || bash -c "ngrok"
위 스크립트는 실행 상태를 확인하고 ngrok
, 실행 중이 아니면 명령을 실행하여 시작합니다. 명령의 괄호는 grep
grep 명령 자체의 결과를 필터링하는 데 도움이 됩니다.
이것을 cron
구성 파일에 추가하면 정기적으로 확인됩니다.
노트:
확인하고 다시 시작하는 사이에 약간의 지연 시간을 추가하고, ngrok
심각한 문제가 발생하여 다시 시작할 수 없게 되는 것을 방지하기 위해 재시도 한도를 설정할 수도 있습니다.