【问题标题】:Puppet init script doesn't create the pid file?Puppet init 脚本不创建 pid 文件?
【发布时间】:2012-09-27 22:02:25
【问题描述】:
  • 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 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/

【问题讨论】:

  • 包括您正在使用的操作系统的名称/版本/发行版。还要发布运行“哪个守护进程”的输出。问题可能出在 daemon 命令上,但我无法跟踪相同的文档/错误列表。
  • 基于 Red Hat,daemon 是在/etc/rc.d/init.d/functions 脚本中定义的“标准”函数。更新了我的问题。
  • fpaste.org 的链接已损坏... :(

标签: bash puppet init.d sysv


【解决方案1】:

所以,在我看来,这里可能有两种可能性:

  1. 如果您尝试使用 daemon 命令的 --pidfile 选项,我相信您遇到了语法问题。

    • 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 文件。流程管理工具Circus就是这样工作的。它可能是配置文件或$PUPPETMASTER 代表的程序中的一个选项。

    • 我不是 Puppet 用户,因此无法在此处为您提供详细信息。但我会查看Puppet labs documentation 以了解有关此选项的更多信息。
    • 请务必注意,如果 $PUPPETMASTER 正在自行守护进程,那么传递给 daemon()--pidfile 参数将无效。

狩猎愉快!

【讨论】:

    【解决方案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/puppetmasterpidfile 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 2022-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2021-12-01
      • 2022-12-23
      相关资源
      最近更新 更多