2012-10-07 60 views
5
  • CentOS版本5.4(最終版)
  • puppet-server-2.7.19-1.el5從puppetlabs回購安裝。

puppetmaster啓動成功,但它不創建pid文件。這是停車時爲[ FAILED ]消息的原因:Puppet初始化腳本不會創建pid文件?

/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/ 
+0

包括您正在使用的操作系統的名稱/版本/發行版。還發布運行「哪個守護進程」的輸出。問題可能出現在守護程序命令中,但我無法爲相同的文檔/錯誤列表追蹤。 –

+0

在基於Red Hat的基礎上,'daemon'是'/ etc/rc.d/init.d/functions'腳本中定義的「標準」函數。更新我的問題。 – quanta

+0

與fpaste.org的鏈接被破壞... :( – eikonomega

回答

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'

相應地在您的/etc/init.d/puppetmaster中修改pidfile的值。

0

因此,它看起來對我來說,有可能是幾個可能的原因在這裏:

  1. 如果你要使用的守護進程的命令,我相信你有語法問題的--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]}
  2. 這裏的第二個選項是$PUPPETMASTER(或者更確切地說,它背後的程序)可能會守護進程本身,如果是這樣,可能是負責創建自己的.pid文件。流程管理工具Circus以這種方式工作。這可能是配置文件或$PUPPETMASTER表示的程序的一個選項。

    • 我不是Puppet用戶,所以我無法在這裏幫助您解決具體問題。但我會查看Puppet labs documentation以瞭解有關此選項的更多信息。
    • 重要的是要注意,如果$ PUPPETMASTER自身是守護進程,那麼--pidfile參數被傳遞給daemon()將不起作用。

好狩獵!