실행중인 프로그램의 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.