puppet-server-2.7.19-1.el5
已从puppetlabs repo安装。 puppetmaster
已成功启动,但它不会创建pid文件。这是停止时[ FAILED ]
消息的原因:
/etc/init.d/puppetmaster stop
Stopping puppetmaster: [FAILED]
init脚本: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 master正在以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/
答案 0 :(得分:2)
创建pid文件取决于受控程序(在本例中为puppetmasterd
),而不是daemon()
函数; daemon()
依赖于此。
确认 puppetmasterd
创建其pid文件的位置(可能是/var/run/puppet.pid
,/var/lib/puppet/run/master.pid
等。)要查找,请检查{{1}的内容(如果是脚本),或者杀死puppetmasterd
然后puppetmasterd
。
相应地修改strace -f puppetmasterd 2>&1 | grep '\.pid'
中pidfile
的值。
答案 1 :(得分:0)
所以,在我看来,这里有几种可能性:
如果您尝试使用守护程序命令的--pidfile选项,我相信您有语法问题。
Usage: daemon [+/-nicelevel] {program}
。 不完全清楚的是,在程序位置之后包含的任何内容都被视为传递给程序的选项,而不是守护程序函数调用。 --pidfile
参数传递给$PUPPETMASTER
本身,而不是daemon()
。您可以使用以下方法解决此问题:daemon --pidfile=/var/run/puppet/puppetmaster.${PUPPETMASTER_PORTS[$i]}.pid $PUPPETMASTER $PUPPETMASTER_OPTS --masterport=${PUPPETMASTER_PORTS[$i]}
这里的第二个选项是$PUPPETMASTER
(或者更确切地说,它背后的程序)可以自己守护,如果是,可以负责创建自己的.pid文件。流程管理工具Circus以这种方式工作。它可能是配置文件中的选项,也可能是$PUPPETMASTER
表示的程序的选项。
--pidfile
的{{1}}参数将无效。好狩猎!