2010-11-10 21 views
2

Je développe des initscripts pour certains de nos logiciels, et j'ai de la difficulté à décider comment l'utiliser pour un morceau particulier.Logique InitScript à processus multiples

Nous disposons d'un logiciel développé en interne pour transmettre des données sur le réseau. Il est construit sur un modèle pubsub standard. Il y a un processus d'éditeur (deux, en fait, pour deux cas d'utilisation différents), un processus de courtier et un processus d'abonné). Toute combinaison de ces processus, et même plusieurs du même processus, peut s'exécuter simultanément sur une boîte donnée. Je n'arrive pas à déterminer la meilleure façon de configurer cela. Comme il peut varier d'une boîte à l'autre, cela va probablement entrer dans /etc/sysconfig/pubsub qui sera lu par l'initscript. Les seules choses que je devrai autoriser à configurer sont (1) le nom du processus, qui est l'un de log_publish, dir_publish, broker, subscribe, et (2) le fichier de configuration qui correspond à ce processus particulier. Je souhaite éviter de dire aux gens comment modifier l'initscript par boîte afin de changer la liste des processus en cours d'exécution, donc ce fichier de configuration unique par boîte est la meilleure façon de le faire. Je suppose que cela signifie également que je devrai avoir une sorte d'identifiant unique par processus sur la boîte, car j'ai l'intention d'utiliser la méthode touch /var/lock/subsys/* déjà utilisée par la plupart des scripts RedHat pour verrouiller un processus deux fois. Sachant cela, je sais que l'identifiant ne peut pas toujours être aléatoire, sinon il ne sera jamais efficace pour éviter les doublons avec le même fichier de configuration (car, encore une fois, je dois pouvoir exécuter plusieurs processus avec différents fichiers de configuration) .

Je n'ai aucune idée de la meilleure façon de représenter cela dans la configuration.

Répondre

1

Je l'ai implémenté de la même manière que VNC lorsqu'il est exécuté en tant qu'initscript.

Si vous regardez votre fichier de configuration de distro pour vnc init (ex RedHat/CentOS. /etc/sysconfig/vncservers), vous voyez ceci:

# The VNCSERVERS variable is a list of display:user pairs. 
# 
# Uncomment the line below to start a VNC server on display :1 
# as my 'myusername' (adjust this to your own). You will also 
# need to set a VNC password; run 'man vncpasswd' to see how 
# to do that. 
# 
# DO NOT RUN THIS SERVICE if your local area network is 
# untrusted! For a secure way of using VNC, see 
# <URL:http://www.uk.research.att.com/vnc/sshvnc.html>. 

# VNCSERVERS="1:myusername" 
# VNCSERVERARGS[1]="-geometry 800x600" 

assez simple. Vous définissez un numéro d'écran et les paramètres à associer si nécessaire.

Alors maintenant, j'ai, par exemple:

PUBSUBPROCS="1:publish 2:broker 3:subscribe" 
PUBSUBARGS[1]="/config/publish.cfg" 
PUBSUBARGS[2]="/config/broker.cfg" 
PUBSUBARGS[3]="/config/subscribe.cfg" 

Et surtout toute la logique de l'analyse syntaxique cela a également été arraché de la initscript vncserver, que je ne vais pas poster ici pour des raisons de longueur.

0

Je dirais avoir plusieurs initscripts, un par type de processus, puis laisser la configuration pour chacun déterminer combien de processus à générer.

+0

Avez-vous une suggestion sur la meilleure façon de gérer la configuration de tous ces processus? Une sorte de script/application d'aide pour générer les initscripts dont vous avez besoin par boîte? – VxJasonxV

+0

Ayez-les tous, et laissez les gens utiliser chkconfig ou autre chose pour les allumer ou les éteindre. –

+0

Vous avez manqué la partie où il peut y avoir plusieurs du même processus. Donc, ce n'est pas aussi simple que "expédier tous les 4 et les laisser choisir". Nous avons un cas d'utilisation (malheureux) où une de nos boîtes a 7 ou 8 éditeurs, et rien d'autre. En y réfléchissant, j'ai complètement oublié le 5ème processus qui existe, que nous utilisons sur la même boîte d'éditeurs multiples. – VxJasonxV