Exécutif de script infini simple sans démarrage

J'ai une boîte CentOS 5.11 avec laquelle je dois travailler pour l'instant – dans un environnement de production où je ne peux pas vraiment le pousser à CentOS 6, du less pendant un certain time. Je dois avoir un impact faible sur ce projet, je ne peux pas gâcher cette boîte de production.

J'ai un script, appelez-le / my / foo. En ce moment, ce script s'exécute à partir de cron toutes les 3 minutes – il s'exécute en fait:

* / 3 * * * * / my / foo myparam

Le problème est que le script ne prend généralement que quelques secondes pour fonctionner, puis nous attendons presque 3 minutes. Mais, nous pouvons seulement avoir une instance à courir à la fois (alors, en fait, nous avons déjà une vulnérabilité si une anomalie entraîne une course de plus de 3 minutes). Parfois, le script peut avoir beaucoup de choses à faire et prendre 2 minutes, nous l'avons donc fixé à 3 ou plus.

Ce que nous critiquons vraiment, c'est simplement garantir que l'une, et une seule, une instance de ce script s'exécute «indéfiniment» (en boucle) et, très probablement, nous allons faire un «sumil 30» là-bas pour le garder étant trop agressif. Le script lui-même n'est pas une boucle – c'est un script one-pass. Mais nous perdons définitivement beaucoup de time dans 99% des circonstances en ne fonctionnant que toutes les 3 minutes de Cron. Le 1% des cas où il faut> 2 minutes signifie que nous passons 99% des cas à attendre quand il pourrait courir à nouveau et faire plus de travail.

Donc, nous pensons que cela pourrait être un hack décent, pour l'instant, le mettre dans le système init avec un respawn. Là, il court, finit, respawns (prob avec ce petit sumil dans le script lui-même). Pour toujours. Ceci est résilient (une mort accidentelle du process ne signifie pas qu'il est mort pour toujours, etc.).

J'ai vu beaucoup de messages à propos de la mise au point, même un débat sur son avenir dans CentOS 6, et ainsi de suite. Mais encore une fois, je dois publier cela sur cette boîte CentOS 5 pour l'instant – nous n'avons pas de démarrage et ne l'aurons pas bientôt. Je dois glisser ceci sur cette boîte de production avec ce que j'ai … et sans rien casser.

J'ai vu / etc / inittab un peu poo poo'd, mais on a également noté que c'est la meilleure façon d'get une réapparition – que /etc/init.d/ quelle que soit la binding avec /etc/rc3.d/whatever and so sur, la manière typique, ne donne pas de capacités de réapparition. Je ne suis toujours pas sûr de cela – semble-t-il.

Compte tenu de ces contraintes, est-il préférable, et raisonnable, de faire apparaître notre petit script dans / etc / inittab lui-même avec un respawn and go?

One Solution collect form web for “Exécutif de script infini simple sans démarrage”

Je déshonore le script / process et le gère avec Monit .

Cela vous permettra de réapparaître et de contrôler les process, mais vous permet également d'exécuter / vérifier le process sur un intervalle plus court que le cron (par ex. 15 secondes)

  • Utilisation de Upstart pour gérer Unicorn w / rbenv + bundler binstubs w / ruby-local-exec shebang
  • Guide complet pour les scripts init.d?
  • Enregistrement d'une sortie Daemon avec Upstart
  • Redémarrez mysqld avec un paramètre de command line sur ubuntu 10.04
  • nc sort immédiatement, lors de la connection, lorsqu'il est exécuté en tant que travail de démarrage
  • Exécuter gitlab sidekiq (rake task) avec upstart
  • Un moyen approprié d'activer la procédure après le redémarrage sur AWS-AMI linux
  • Exécution de plusieurs instances avec démarrage
  • Monit ne démarrera pas mon nœud js app
  • Ubuntu Upstart Job pour persister tcp_slot_table_ensortinges Avant le assembly NFS
  • Existe-t-il un moyen «standard» de faire du démon dans Debian?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.