web-dev-qa-db-fra.com

Assurez-vous qu'un processus est toujours en cours d'exécution

J'ai commencé à héberger des sites un moment d'utiliser Cherokee. Pour les sources externes (FastCGI, etc.), il dispose d'une option de lancer le processus s'il ne peut pas en trouver un fonctionnement sur la prise ou le port désigné. C'est génial parce que cela signifie si PHP ou A Django Site tombe dessus (comme ils le font occasionnellement), il le redémarre automatiquement.

Sur un nouveau serveur utilisant PHP-FPM, je n'ai pas pu utiliser Cherokee (il a un bogue avec PHP), donc j'ai déménagé à Nginx. J'aime beaucoup Nginx (pour son style de configuration), mais j'ai des problèmes graves avec des processus qui tombent et ne jamais répartir. =PHP Est-ce que cela parfois, mais Django sites est plus un problème. J'ai créé des scripts d'initiation pour eux et ils sont proposés au démarrage, mais cela ne le fait pas Aidez-moi si ils conchisent entre les redémarrages.

Je suppose que je cherche un proxy FastCGI. Quelque chose que, comme Cherokee, sait quels processus doivent être exécutés sur quelles prises/ports et les réponses à la demande. Une telle chose existe-t-elle? Y a-t-il un moyen de construire cela dans nginx (pour faciliter la configuration)?

24
Oli

Que diriez-vous Daemontools et spécifiquement l'outil supervisible

supervoise surveille un service. Il commence le service et redémarre le service s'il meurt. Configuration d'un nouveau service est facile: tous les besoins de supervise sont un répertoire avec un script d'exécution qui exécute le service.

14
Murilo

rESPOWN IN INITTAB

8
Stephen Jazdzewski

Je seconde la suggestion daemontools, mais si vous n'aimez pas la façon dont le logiciel de DJB fonctionne (pour une raison quelconque), il y a aussi supervisord .

J'ai configuré une image FreeBSD un moment où il a utilisé supervisord pour gérer nginx et gunicorn , que j'ai utilisé des applications WSGI simples, Et tout le processus était assez simple.

Si vous faites cela pour Django, GunCorn le rend vraiment simple à déployer Django applications, BTW. Voir ce blog post Pour plus de détails.

5
Hank Gay

Une autre option pourrait être d'utiliser Monit , qui est celle que j'utilise généralement.

4
lenin

Avez-vous envisagé god ?

Dieu est facile à configurer, facile à confirmer un cadre de surveillance écrit dans Ruby.

Garder vos processus de serveur et les tâches en cours d'exécution doivent être une simple partie de votre processus de déploiement. Dieu vise à être la demande de surveillance la plus simple et la plus puissante disponible.

Je l'utilise pour vous assurer que si les rails/nginx sont reluées, ils sont ravivés et, bien que je ne voie pas de prise en charge intégrée pour vérifier si elle utilise le port droit ou non, mais si le problème est que le processus échoue ou ne fonctionne plus, vous ne pouvez pas vous tromper avec god.

2
Chris Bunch

Une solution piraquine serait de lancer périodiquement un script (via cron) que détecte si le processus est en panne et dans ce cas le relance.

0
Robert Swisher

En plus de Daemontools et de Supervisord, il y a Démonize .

0
Brian Clapper

Il existe différentes manières de redémarrer un démon échoué, la recommandation habituelle est "Respawn in InitTAB", mais avec une limite de limite si la machine est vraiment vissée.

Le démon de surveillance peut également surveiller un processus via son fichier PID. Toutefois, cela ne devrait être considéré que comme une ligne secondaire de défense pour redémarrer une machine trop malade pour fonctionner correctement (par exemple de mémoire, une fourchette à fourche, etc.), et non comme une manière principale ou une surveillance et le redémarrage d'un démon.

Enfin, vous pouvez envisager de surveiller des systèmes complexes à l'aide de Nagios pour fournir à l'administrateur (s) avec une vue globale. Il peut exécuter des plug-ins pour sonder le fonctionnement du démon externe, ce qui est un test plus complet de son fonctionnement que simplement le PID soit en direct.

0
Paul Crawford