Je suis en train de configurer un serveur Debian Etch pour héberger des applications ruby et php avec nginx. J'ai réussi à configurer inittab pour démarrer le processus php-cgi au démarrage avec l'action respawn. Après avoir servi 1000 requêtes, les processus de travail php-cgi meurent et sont réapparus par init. Le record inittab ressemble à ceci:Comment raccourcir une entrée de processus inittab, a.k.a., où placer les variables d'environnement qui seront vues par init?
50:23:respawn:/usr/local/bin/spawn-fcgi -n -a 127.0.0.1 -p 8000 -C 3 -u someuser -- /usr/bin/php-cgi
je l'ai écrit d'abord l'entrée de processus (tout après le 3e point) dans un script séparé (simplement parce qu'il était long) et mettez le nom du script dans le dossier inittab, mais parce que le script irait à sa seule ligne et mourir, syslog a été rempli d'erreurs comme ceci:
May 7 20:20:50 sb init: Id "50" respawning too fast: disabled for 5 minutes
Ainsi, je me suis débarrassé du fichier de script et vient de mettre toute la ligne dans le inittab. Désormais, aucune erreur n'apparaît dans le syslog.
Maintenant, je tente la même chose avec thin pour servir une application de rails. Je peux commencer avec succès le serveur mince en exécutant cette commande:
sudo thin -a 127.0.0.1 -e production -l /var/log/thin/thin.log -P /var/run/thin/thin.pid -c /path/to/rails/app -p 8010 -u someuser -g somegroup -s 2 -d start
Il fonctionne apparemment exactement la même chose si j'utilise le -d (daemonize) drapeau ou non. Le contrôle de ligne de commande revient immédiatement (les processus ont été démonisés) de toute façon. Si je mets toute cette commande (moins le sudo et avec des chemins absolus) dans inittab, init se plaint (dans syslog) que l'entrée de processus est trop longue, donc je mets les options dans une variable d'environnement exportée dans/etc/profile. Maintenant, je peux commencer avec succès le serveur avec:
sudo thin $THIN_OPTIONS start
Mais quand je mets cela dans un dossier inittab avec l'action respawn
51:23:respawn:/usr/local/bin/thin $THIN_OPTIONS start
les journaux indiquent clairement que la variable d'environnement ne soit pas visible à init; c'est comme si la commande était simplement "mince".
Comment raccourcir l'entrée de processus inittab? Existe-t-il un autre fichier que/etc/profile où je pourrais définir la variable d'environnement THIN_OPTIONS? Mon expérience antérieure avec php-cgi me dit que je ne peux pas simplement mettre toute la commande dans un script séparé.
Merci - un problème que cette réponse ne gère pas est de réapparaître le serveur léger si/quand il meurt. Une personne devrait se connecter et démarrer manuellement à ce moment-là, ce que nous pouvons déjà faire. Pour autant que je sache, seul inittab permet une réapparition automatique. Si quelqu'un connaît un moyen de dire à init de réapparaître les scripts init.d, cela résoudrait aussi mon problème. – towynlin
Peut-être déboîter (désolé) dans le script init dans une boucle qui démarre à plusieurs reprises le serveur, puis si le processus meurt, la boucle redémarre et le serveur fait, ad infinitum. –
Après avoir fonctionné pendant plusieurs jours, le processus mince n'est pas mort. Cela m'amène à croire que thin fonctionne différemment que (1) le processus php-cgi lui-même ou (2) quelque chose a commencé avec spawn-fcgi (je ne sais pas lequel) - intrinsèquement destiné à mourir après avoir servi un certain nombre de demandes Armé de cette connaissance, je crois maintenant que je n'ai pas besoin de m'inquiéter de la réapparition, bien que la réponse d'Aiden ferait l'affaire si j'avais besoin de m'assurer que la mince réapparaîtrait. J'ai créé un script init.d très simple qui appelle simplement "thin start" ou "thin stop" avec les arguments appropriés. – towynlin