为什么傀儡无法启动保管箱守护程序?



我在Ubuntu 11.10上使用Dropbox命令行实用程序/守护程序,但它不适用于Puppet。

我可以成功地手动控制投递箱:

$ sudo /etc/init.d/dropbox [status/start/stop/status]

然而,当我配置Puppet以确保dropbox始终运行时,它失败了,并显示以下日志消息:

(/Stage[main]/Dropbox::Service/Service[dropbox]/ensure) change from stopped to running failed: Could not start Service[dropbox]: Execution of '/etc/init.d/dropbox start' returned 1:  at /etc/puppet/modules/dropbox/manifests/init.pp:8

这是我的木偶清单文件:

class dropbox {
  include dropbox::service
}
class dropbox::service {
  service { "dropbox":
    ensure => running,
  }
}

上面的错误消息似乎也暗示dropbox"status"命令不适用于Puppet,因为即使dropbox已经在运行,我也会收到同样的错误消息("Cannot start")。

有什么想法吗?

2.7之前的Puppet版本默认不使用/etc/init.d/service status命令。他们在进程表中查找进程名称,所以如果守护进程进程名称与服务名称不同,那么这些行为将给您带来错误,例如:

 ...Service[dropbox]/ensure) change from stopped to running failed...

每一次处决傀儡特工。您应该检查该服务是否具有工作状态命令:

 sudo /etc/init.d/dropbox status; echo $?
 # That command should return output with "running" text and return code 0 like:
 dropboxd for USER dropbox: running (pid 9823)
 0

然后告诉木偶使用它,而不是它自己的(<2.7)机制——在服务定义中输入"hastatus=>true"。

由于"puppet无法启动服务"在谷歌上很受欢迎,我在CentOS上遇到了类似的问题。事实证明,我的问题是由于sudo:我有

Defaults requiretty

在我的sudoers文件中。将其更改为

Defaults requiretty
Defaults:root !requiretty

修复了这个问题,并允许我的服务脚本(使用sudo运行守护进程)通过puppet工作。

希望这能帮助未来的谷歌员工!

最新更新