실행중인 프로그램의 100 개 인스턴스 유지


12

현재 supervisord를 사용하여 한 번에 100 개의 스크립트 인스턴스를 유지 관리하고 있습니다. 죽으면 새로운 것으로 시작합니다.

그러나 더 큰 수 (> 300 프로세스)를 유지하는 데 어려움을 겪고 있으며 대체품을 찾고 있습니다. Monit은 개별 스크립트를 모니터링하므로 원하는 것을하지 않는 것 같으며 동일한 스크립트의 100 인스턴스를 쉽게 볼 수없는 것 같습니다.

사용할 수있는 다른 도구에 대한 제안 사항이 있습니까?


이 스크립트는 무엇을하고 있으며 왜 여러 인스턴스를 원합니까? 그것들은 다른 논쟁 / 환경으로 운영되고 있습니까?
psusi

1
간단한 bash 스크립트가 작동합니까? 같은 ... 실행중인 스크립트 프로세스의 수를 세고 100보다 작 으면 누락 된 수를 시작합니까?
개브.

3
무엇을 이루려고 노력하고 있습니까? 300 개의 프로세스 중 일부가 죽는 이유는 무엇입니까? 작업을 수행하는 더 좋은 방법이있을 것입니다. 최소 299 개의 스크립트 인스턴스가 300 개 미만인 경우 응용 프로그램 아키텍처에 문제가있는 것입니다. 왜 사망했는지 이해하지 못한 채 다시 시작된 프로세스는 종종 또 다른 사망을 초래하고 결과적으로 상당한 오버 헤드를 발생시킵니다.
msw

URL을 처리하는 레거시 시스템을 사용하고 있으며 각각 자체 스레드 (PHP로 작성)가 필요합니다. 그렇습니다. 건축에는 결함이 있지만 여전히 작동해야합니다 ... 현재 새로운 건축 작업 :)
jong

답변:


1

당신이 사용할 수있는:

ps h --ppid $$ | wc -l

bash 스크립트에서 자식 프로세스 수를 가져옵니다 (ps 포함). 따라서 1000 개의 프로세스를 원한다면 1001을 반환하는지 확인하십시오.

cmd &

현재 스크립트의 자식으로 실행되도록합니다 (따라서 카운트에 포함됩니다). 잠시 동안 잠을 자고 루프에서 영원히 다시 확인할 수 있습니다. 명심해야 할 것은 다른 프로세스를 생성하는 경우 ps원하는 프로세스를 필터링하기 위해 명령을 수정해야한다는 것 입니다.

그 첫 번째 명령은 퍼즐의 핵심 부분이며 스크립트를 가질 때까지 조금 더 있어야합니다.


0

pgrep|wc -l간단한 쉘 스크립트에서 또는 이와 비슷한 것을 사용 합니다. 으로 각 검사 사이에 1 초 (또는 원하는 경우 Linux에서는 더 적음) 동안 기다리십시오 sleep.


0

스크립트가 종료되고 셸로 돌아 가면 각 인스턴스에 래퍼 스크립트를 사용할 수 있습니다.

while [ 1 == 1 ] ; do /path/to/script ; done

또는 스크립트를 분기하고 wait/waitpid죽은 프로세스를 포착하는 데 사용하는 랩퍼를 작성하십시오 .


1
스크립트에 터미널 항상 오류 조건이있는 경우 (적어도 꽉 참, 구성 파일을 읽을 수없는 경우 등)에는 적어도 마지막에 절전 모드를 해제합니다. 그렇지 않으면 100 개의 프로세스가 진행될 수 있습니다. CPU 조각에 대해. 또한-100 * (bash 프로세스 + 실패한 앱의 초기 시작 풋 프린트) == 잠재적으로 사소한 양의 램)
신시사이저 패턴
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.