2009-11-26 3 views
1

PHP로 작성된 웹 사이트 (CakePHP)에서 특정 자원 집약적 인 작업이 백그라운드 프로세스에 의해 처리됩니다. 이것은 Beanstalkd 메시지 대기열을 통해 수행됩니다. Monit에서 모니터 할 수 있도록 백그라운드 프로세스의 상태를 검색 할 수있는 방법이 필요합니다.내 PHP beanstalkd 백그라운드 프로세스의 상태 확인

백그라운드 프로세스는 Beanstalkd와 통신하는 CakePHP 쉘 (PHP CLI 스크립트)입니다. 그것은 단순히 Benastalkd에 reserve()를 수행하고 새로운 메시지를 기다립니다. 메시지를 받으면 처리합니다. 어떤 일이 잘못되면 백그라운드 프로세스를 다시 시작할 수 있도록 Monit으로이 프로세스를 모니터링하는 방법이 필요합니다.

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

아니면 여기 너무 복잡해서 Monit과 같은 프로세스를 모니터링하는 훨씬 쉬운 방법이 있습니까?

미리 감사드립니다.

답변

2

다음은 내가 결국하는 일입니다.

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

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

CLI 스크립트가 30 초 내에 응답을받지 못하면 백그라운드 데몬이 걸려있을 가능성이 높다는 오류와 함께 종료됩니다.

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

1

아마도 Monit이나 Nagios에 연결하여 통계를 실행하고 '너무 많습니다'라고 대답하는 플러그인이있을 것입니다. 이미 작성된 '프로토콜'은 없지만 원하는 작업을 수행하기 위해 기존의 텍스트 기반 텍스트 (nntp 또는 smtp 등)를 수정하는 것이 어렵지 않습니다. 그것은 그것을 보면서 C로 쓰는 것을 의미합니다.

CLI-PHP 스크립트에서 필자는 두 가지 방법 중 하나 (또는 ​​둘 다)를 통해 설명하려고합니다.

우선 순위 메시지를 대기열에 드롭하고 몇 초 이내에 다시 나타나는지 확인하십시오. 전용 대기열에 넣고 거기에 넣기 전에 아무 것도 없는지 확인하면 좋은 추가 기능이 될 것입니다. 2/'stats'를 수행하고 대기중인 사람 수를 확인하십시오 : 'current-jobs-ready'.

정보를 웹 사이트로 다시 가져 오려면 (어떤 방법 으로든) 파일에 쓰거나 Memcached와 같이 gts가 읽고 실행 한 내용으로 쓸 수 있습니다.

+0

찾고. 귀하의 제안은 beanstalkd 메시지를 소비하고있는 백그라운드 프로세스가 아니라, beanstalkd를 테스트하는 것으로 보입니다. 그래서, 어떻게 든 백그라운드 프로세스 (Beanstalkd 나 POSIX 시그널을 통해)를 신호 할 필요가 있습니다.나는 다른 방법을 모른다.) 그리고 백그라운드 프로세스는 상태를 다시 알릴 필요가있다. 그러나 어떻게? –