Question

J'ai un site Web écrit en PHP (CakePHP) où certaines tâches gourmandes en ressources sont gérées par un processus en arrière-plan. Cela se fait par la file de messages Beanstalkd. J'ai besoin d'un moyen de récupérer l'état de ce processus d'arrière-plan pour pouvoir le surveiller avec Monit.

Le processus en arrière-plan est un shell CakePHP (juste un script PHP) qui communique avec Beanstalkd. Il fait simplement une reserve () sur Benastalkd et attend un nouveau message. Quand il reçoit un message, il le traite. Je souhaite pouvoir contrôler ce processus avec Monit afin qu'il puisse redémarrer le processus en arrière-plan en cas de problème. .

Ce à quoi je pensais jusqu’à présent, c’est l’écriture d’un script CLI PHP qui supprime un message dans Beanstalkd. Le processus d'arrière-plan récupère le message et communique son statut interne au script CLI. Mais comment? Sockets? La memoire partagée? Une autre méthode IPC?

Ou suis-je peut-être trop compliqué ici et existe-t-il un moyen beaucoup plus facile de surveiller un tel processus avec Monit?

Merci d'avance!

Était-ce utile?

La solution

Voici ce que j'ai fini par faire.

Le script CLI se connecte à beanstalkd, crée une nouvelle file d'attente (tube) et commence à la regarder. Il supprime ensuite un message de la plus haute priorité dans la file d'attente surveillée par le démon en arrière-plan. Ce message contient le nom de la nouvelle file d'attente surveillée par le script CLI.

Le processus d'arrière-plan reçoit ce message presque immédiatement (car il s'agit d'une priorité absolue), génère un message d'état et le place dans la file d'attente surveillée par le script CLI. Le script CLI le reçoit, puis ferme la file d'attente.

Lorsque le script CLI ne reçoit pas de réponse dans les 30 secondes, il se ferme avec une erreur indiquant que le démon d'arrière-plan est (probablement) bloqué.

J'ai lié tout cela à Monit. Monit peut maintenant vérifier que le démon d’arrière-plan est en cours d’exécution (via la liste pidfile et la liste des processus) et s’assurer qu’il traite toujours les messages (en utilisant l’outil CLI pour vérifier qu’il répond aux demandes d’état)

Autres conseils

Il existe probablement un plugin vers Monit ou Nagios pour se connecter, exécuter les statistiques et revenir s'il y en a «trop». Il n’existe pas déjà de «protocole» pour cela, mais il ne semble pas trop difficile de modifier un protocole existant (tel que nntp ou smtp) pour faire ce que vous voulez. Cela veut dire qu’il faut l’écrire en C, à en juger par son apparence.

À partir d'un script CLI-PHP, je le ferais par l'une des méthodes (ou les deux).

1 / déposez un message de priorité (faible valeur) dans la file d'attente et assurez-vous qu'il revienne dans quelques secondes. Le placer dans une file d'attente dédiée et s'assurer qu'il n'y a rien avant de le mettre serait un bon ajout également. 2 / effectuez une "statistique" et voyez combien sont en attente: "prêt pour les emplois en cours".

Pour récupérer les informations sur un site Web (de toute façon), vous pouvez écrire dans un fichier ou dans un fichier similaire à Memcached, qui est lu et traité avec précision.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top