Скрипт инициализации Puppet не создает файл pid?

  • CentOS релиз 5.4 (финал)
  • puppet-server-2.7.19-1.el5 устанавливается из репозитория Puppetlabs.

puppetmaster запускается успешно, но это не создает файл pid. Это причина [ FAILED ] сообщение при остановке:

/etc/init.d/puppetmaster stop
Stopping puppetmaster:                                     [FAILED]

Скрипт инициализации: http://fpaste.org/nsfI/

/etc/rc.d/init.d/functions библиотека: http://fpaste.org/ox5Q/

И вот что я получаю при работе в режиме отладки: http://fpaste.org/DkoS/

Я знаю способ echo pid к файлу вручную после запуска, но почему нет daemon функция-х --pidfile Работа?

daemon $PUPPETMASTER $PUPPETMASTER_OPTS --masterport=${PUPPETMASTER_PORTS[$i]} --pidfile=/var/run/puppet/puppetmaster.${PUPPETMASTER_PORTS[$i]}.pid

Конечно, Хозяин Марионеток работает как puppet пользователь:

ps -ef | grep [p]uppet
puppet   23418     1  0 18:13 ?        00:00:00 /usr/bin/ruby /usr/sbin/puppetmasterd

и владелец /var/run/puppet/ папка puppet:

# ls -ld /var/run/puppet/
drwxr-xr-x 2 puppet puppet 4096 Sep 17 18:46 /var/run/puppet/

2 ответа

Это зависит от контролируемой программы (в этом случае puppetmasterd), не daemon() функция, чтобы создать pidfile; daemon() опирается на это.

Подтвердите где puppetmasterd создает свой pidfile (это может быть /var/run/puppet.pid, /var/lib/puppet/run/master.pidи т. д.) Чтобы узнать, осмотрите содержимое puppetmasterd (если скрипт) или убей puppetmasterd затем strace -f puppetmasterd 2>&1 | grep '\.pid',

Изменить значение pidfile в вашем /etc/init.d/puppetmaster соответственно.

Поэтому мне кажется, что здесь может быть несколько возможностей:

  1. Если вы пытаетесь использовать опцию --pidfile команды daemon, я считаю, что у вас есть проблема с синтаксисом.

    • Команда демона Red Hat имеет следующую (бесполезную) подпись: Usage: daemon [+/-nicelevel] {program}, Что не совсем ясно, так это то, что все, что вы включаете после расположения программы, обрабатывается как опция, передаваемая программе, а не вызову функции демона.
    • Итак, в вашем случае вы передаете --pidfile аргумент $PUPPETMASTER сам в отличие от daemon(), Вы можете исправить это, используя следующее: daemon --pidfile=/var/run/puppet/puppetmaster.${PUPPETMASTER_PORTS[$i]}.pid $PUPPETMASTER $PUPPETMASTER_OPTS --masterport=${PUPPETMASTER_PORTS[$i]}
  2. Второй вариант здесь заключается в том, что $PUPPETMASTER (или, скорее, программа, стоящая за ним) может демонизировать себя и, если это так, может отвечать за создание своего собственного файла.pid. Инструмент управления процессами Цирк работает таким образом. Это, вероятно, вариант в файле конфигурации или для программы, представляющей $PUPPETMASTER,

    • Я не пользователь Puppet, поэтому я не смогу помочь вам со спецификой здесь. Но я бы заглянул в документацию Puppet labs, чтобы узнать больше об этой опции.
    • Важно отметить, что если $PUPPETMASTER демонизирует себя, то --pidfile аргумент передается daemon() не будет иметь никакого эффекта.

Удачной охоты!

Другие вопросы по тегам