Сценарий инициализации 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 работает как пользователь 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/

person quanta    schedule 07.10.2012    source источник
comment
Укажите название/версию/дистрибутив используемой ОС. Также опубликуйте вывод запуска какого демона. Проблема, вероятно, связана с командой daemon, но у меня возникают проблемы с отслеживанием документации/списков ошибок для нее.   -  person Rob Kielty    schedule 07.10.2012
comment
На основе Red Hat daemon — это стандартная функция, определенная в сценарии /etc/rc.d/init.d/functions. Обновил мой вопрос.   -  person quanta    schedule 08.10.2012
comment
Ссылки на fpaste.org битые... :(   -  person eikonomega    schedule 08.01.2014


Ответы (2)


Контролируемая программа (в данном случае puppetmasterd), а не функция daemon(), должна создать pid-файл; daemon() полагается на это.

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

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

person vladr    schedule 23.11.2012

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

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

    • Red Hat's daemon command has the following (unhelpful) signature: Usage: daemon [+/-nicelevel] {program}. What isn't altogether clear is that anything that you include after the program location is treated as an option passed to the program, not to the daemon function call.
    • Итак, в вашем случае вы передаете аргумент --pidfile самому $PUPPETMASTER, а не daemon(). Вы можете исправить это, используя следующее: daemon --pidfile=/var/run/puppet/puppetmaster.${PUPPETMASTER_PORTS[$i]}.pid $PUPPETMASTER $PUPPETMASTER_OPTS --masterport=${PUPPETMASTER_PORTS[$i]}
  2. Второй вариант здесь заключается в том, что $PUPPETMASTER (точнее, программа, стоящая за ним) может демонизировать себя, и если это так, то может быть ответственным за создание собственного файла .pid. Так работает инструмент управления процессами Circus. Вероятно, это опция в файле конфигурации или для программы, представленной $PUPPETMASTER.

    • I'm not a Puppet user, so I won't be able to help you with the specifics here. But I would look into the Puppet labs documentation to find out more about this option.
    • Важно отметить, что если $PUPPETMASTER демонизирует себя, то аргумент --pidfile, переданный в daemon(), не будет иметь никакого эффекта.

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

person eikonomega    schedule 08.01.2014