Скрипт инициализации 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
соответственно.
Поэтому мне кажется, что здесь может быть несколько возможностей:
Если вы пытаетесь использовать опцию --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]}
- Команда демона Red Hat имеет следующую (бесполезную) подпись:
Второй вариант здесь заключается в том, что
$PUPPETMASTER
(или, скорее, программа, стоящая за ним) может демонизировать себя и, если это так, может отвечать за создание своего собственного файла.pid. Инструмент управления процессами Цирк работает таким образом. Это, вероятно, вариант в файле конфигурации или для программы, представляющей$PUPPETMASTER
,- Я не пользователь Puppet, поэтому я не смогу помочь вам со спецификой здесь. Но я бы заглянул в документацию Puppet labs, чтобы узнать больше об этой опции.
- Важно отметить, что если $PUPPETMASTER демонизирует себя, то
--pidfile
аргумент передаетсяdaemon()
не будет иметь никакого эффекта.
Удачной охоты!