Pergunta

Eu tenho um site escrito em PHP (CakePHP) onde tarefas intensivas determinado recurso são tratadas por um processo de fundo. Isto é feito através da fila de mensagens Beanstalkd. Eu preciso de alguma maneira de recuperar o status desse processo em segundo plano para que eu possa monitorá-lo com Monit.

O processo de fundo é um Shell CakePHP (apenas um script PHP CLI) que se comunica com Beanstalkd. Ele simplesmente faz uma reserva () no Benastalkd e aguarda uma nova mensagem. Quando se recebe uma mensagem, ele processa. Eu quero uma maneira de acompanhar este processo com Monit para que ele possa reiniciar o processo em segundo plano se algo tem de errado gone .

O que eu estive pensando sobre até agora está escrevendo um script PHP CLI que deixa cair uma mensagem no Beanstalkd. Os picaretas processo fundo a mensagem e de alguma forma o comunica de volta estatuto interno para o script CLI. Mas como? Tomadas? Memoria compartilhada? Algum outro método IPC?

Ou estou, talvez, ser muito complicado aqui e há uma maneira muito mais fácil de monitorar tal processo com Monit?

Agradecemos antecipadamente!

Foi útil?

Solução

Aqui está o que eu acabei fazendo no final.

As Ligações de script CLI para beanstalkd, cria uma nova fila (tubo) e começa a vê-lo. Em seguida, ele deixa cair uma mensagem de maior prioridade na fila que o daemon fundo está assistindo. Essa mensagem contém o nome da nova fila que o script CLI está monitorando.

O processo de fundo recebe esta mensagem quase imediatamente (porque é mais alta prioridade), gera uma mensagem de status e coloca-o na fila que o script CLI está assistindo. O script CLI recebe-lo e, em seguida, fecha a fila.

Quando o script CLI não obter uma resposta em 30 segundos ele vai sair com um erro indicando que o daemon fundo é (mais provável) pendurado.

Eu amarrei tudo isso em Monit. Monit podem agora verificar se o daemon em segundo plano está em execução (por meio da lista pidfile e processo) e verificar se ele está realmente ainda o processamento de mensagens (usando a função CLI para teste que ele responde a pedidos de estado)

Outras dicas

Provavelmente há um plugin para Monit ou Nagios para se conectar, executar as estatísticas e retorno se há 'muitos'. Não há um 'protocolo' já escrito para isso, mas t não parece ser superior a difícil modificar um baseado em texto existente (como NNTP ou SMTP) para fazer o que quiser. Ele faz a escrita média-lo em C, porém, pelo que parece.

A partir de um script de CLI-PHP, eu iria sobre isso através de um (ou ambos) de dois métodos diferentes.

1 / soltar um (low-ish) mensagem de prioridade na fila, e certifique-se que ele volte dentro de alguns segundos. Colocá-lo em uma fila dedicado e ter certeza que não há nada lá antes de colocá-lo lá seria um bom complemento também. 2 / executar um 'estatísticas' e ver quantos estão à espera: 'current-emprego-ready'

.

Para obter a volta informações para um site (de qualquer forma), você pode gravar em um arquivo, ou em algo como Memcached que gts ler e postas em prática.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top