Многопроцессная логика InitScript - PullRequest
2 голосов
/ 10 ноября 2010

Я занимаюсь разработкой начальных сценариев для некоторых из наших программ и с трудом решаю, как использовать их для определенной части.

У нас есть собственное программное обеспечение, отвечающее за передачу данных по сети, оно построено настандартная модель pubsub.Существует процесс публикации (фактически два для двух разных вариантов использования), процесс посредника и процесс подписчика).Любая комбинация этих процессов, и даже несколько одинаковых процессов, могут выполняться одновременно на заданном блоке.У меня возникают проблемы с выбором наилучшего способа настройки.Так как он может варьироваться от коробки к коробке, это, вероятно, войдет в /etc/sysconfig/pubsub, который будет прочитан initscript.

Единственное, что мне нужно будет разрешить для настройки, это (1) имя процесса, который является одним из log_publish, dir_publish, брокера, подписки и (2) файла конфигурации, который соответствует этому конкретному процессу.

Я хотел бы не говорить людям, как изменять начальный текст для каждого блока, чтобы изменитьсписок запущенных процессов, так что этот уникальный файл конфигурации для каждого блока - лучший способ, которым я могу придумать для этого.

Полагаю, это также означает, что мне потребуется какой-то уникальный идентификатор для каждого процессана коробке, так как я намереваюсь использовать метод touch /var/lock/subsys/*, который большинство скриптов RedHat уже использует, чтобы заблокировать запуск процесса дважды.Зная это, я знаю, что идентификатор не всегда может быть случайным, иначе он никогда не будет эффективным для предотвращения дублирования процессов с одним и тем же файлом конфигурации (потому что, опять же, мне нужно иметь возможность запускать несколько процессов с разными файлами конфигурации).

Понятия не имею, как лучше всего это представить в конфигурации.

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Я реализовал это аналогично тому, как это делает VNC при запуске в качестве начального сценария.

Если вы посмотрите файл конфигурации вашего дистрибутива для vnc init (например, RedHat / CentOS: /etc/sysconfig/vncservers), вы увидите следующее:

# 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"

Довольно прямо. Вы определяете номер экрана и параметры для соответствия при необходимости.

Итак, у меня есть, например:

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

И большая часть всей логики для анализа этого также была извлечена из начального скрипта vncserver, который я не буду публиковать здесь по соображениям длины.

0 голосов
/ 10 ноября 2010

Я бы сказал, что у меня будет несколько initscripts, по одному для каждого типа процесса, а затем позволю конфигурации для каждого определить, сколько из этого процесса должно появиться.

...