문제

리소스를 많이 사용하는 특정 작업을 백그라운드 프로세스에서 처리하는 PHP(CakePHP)로 작성된 웹사이트가 있습니다.이는 Beanstalkd 메시지 대기열을 통해 수행됩니다.Monit로 모니터링할 수 있도록 백그라운드 프로세스의 상태를 검색할 수 있는 방법이 필요합니다.

백그라운드 프로세스는 Beanstalkd와 통신하는 CakePHP Shell(PHP CLI 스크립트)입니다.단순히 Benastalkd에서 Reserve()를 수행하고 새 메시지를 기다립니다.메시지를 받으면 처리합니다.이 프로세스를 모니터링하는 방법을 원합니다. 모니트 문제가 발생하면 백그라운드 프로세스를 다시 시작할 수 있습니다.

지금까지 제가 생각한 것은 Beanstalkd에 메시지를 드롭하는 PHP CLI 스크립트를 작성하는 것입니다.백그라운드 프로세스는 메시지를 선택하고 내부 상태를 CLI 스크립트에 다시 전달합니다.하지만 어떻게?소켓?공유 메모리?다른 IPC 방법이 있나요?

아니면 여기가 너무 복잡해서 Monit를 사용하여 이러한 프로세스를 모니터링하는 훨씬 더 쉬운 방법이 있습니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

내가 결국 결국 한 일은 다음과 같습니다.

CLI 스크립트는 Beanstalkd에 연결하고 새 대기열 (튜브)을 생성하고 시청을 시작합니다. 그런 다음 배경 데몬이보고있는 대기열에서 가장 높은 우선 순위 메시지를 삭제합니다. 이 메시지에는 CLI 스크립트가 모니터링되는 새 대기열의 이름이 포함되어 있습니다.

배경 프로세스는이 메시지를 거의 즉시 수신하고 (우선 순위가 가장 높기 때문에) 상태 메시지를 생성하고 CLI 스크립트가보고있는 대기열에 넣습니다. CLI 스크립트는이를 수신 한 다음 대기열을 닫습니다.

CLI 스크립트가 30 초 안에 응답을 얻지 못하면 배경 데몬이 (대부분) 매달려 있음을 나타내는 오류가 발생하여 종료됩니다.

나는이 모든 것을 모니트에 묶었 다. Monit은 이제 배경 데몬이 실행 중인지 확인하고 (PidFile 및 프로세스 목록을 통해) 실제로 메시지를 처리하는지 확인하여 CLI 도구를 사용하여 상태 요청에 응답하는 것을 테스트 함)

다른 팁

연결하고 통계를 실행하고 '너무 많은' 경우 반환할 수 있는 Monit 또는 Nagios 플러그인이 있을 수 있습니다.이를 위해 이미 작성된 '프로토콜'은 없지만 원하는 작업을 수행하기 위해 기존 텍스트 기반 프로토콜(nntp 또는 smtp 등)을 수정하는 것이 그다지 어렵지 않은 것 같습니다.겉보기에는 C로 작성한다는 의미입니다.

CLI-PHP 스크립트에서 두 가지 방법 중 하나(또는 둘 다)를 통해 문제를 해결하겠습니다.

1/ (낮은) 우선순위 메시지를 대기열에 넣고 몇 초 내에 다시 나타나는지 확인하세요.전용 대기열에 넣고 거기에 넣기 전에 아무것도 없는지 확인하는 것도 좋은 추가 기능이 될 것입니다.2/ '통계'를 수행하고 몇 명이 기다리고 있는지 확인합니다.'현재 작업 준비'.

정보를 웹사이트로 다시 가져오려면(어느 쪽이든) 파일에 쓸 수도 있고, 읽고 작동하는 Memcached와 같은 곳에 쓸 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top