일부 jvm 기반 프로세스가 있는데 서버가 다시 시작될 때 그리고 예기치 않은 오류 등으로 인해 중지될 때 해당 프로세스가 시작되는지 확인해야 합니다.
만일을 대비해 Ubuntu 12.04를 실행하고 있습니다.
나는 샘플 upstart 스크립트를 보았고 이 접근 방식에 어느 정도 기울고 있지만 upstart 또는 supervisord와 같은 것과의 차이점이 무엇인지 이해하고 싶습니다.
그것들은 정확히 동일한 목적으로 사용됩니까, 아니면 기능적 차이가 있습니까?
답변1
차이점은 upstart가 init를 대체하는 반면 Supervisord는 Process Control System
Supervisord에 있다는 것입니다.장소:
launchd, daemontools 및 runit과 같은 프로그램과 동일한 목표 중 일부를 공유합니다. 이러한 프로그램 중 일부와는 달리 "프로세스 ID 1"을 사용하여 init를 대체하여 실행되지는 않습니다. 오히려 프로젝트나 클라이언트와 관련된 프로세스를 제어하는 데 사용되며 다른 프로그램처럼 시작 시 실행되도록 설계되었습니다.
이는 Supervisord 자체가 upstart 작업 파일이나 sysV init 스크립트를 통해 upstart에 의해 시작된다는 것을 의미합니다. 개인적으로 저는 다음과 같은 이유로 단순한 초기화 시작 대신 프로세스 관리자를 사용하기로 선택했습니다.
- 서비스가 제대로 데몬화되지 않았습니다.
- 서비스가 종료된 것으로 알려져 모니터링 및 재시작이 필요합니다.
제대로 데몬화되지 않는 프로그램의 예는 stdout 및 stderr을 닫지 않고 이러한 위치에 계속 데이터를 쓰는 경우입니다. Supervisord는 이 출력의 로깅을 처리할 수 있습니다.