我在Ubuntu 11.10上使用Dropbox command-line utility/daemon,但它不能与Puppet一起使用。
我可以手动成功控制Dropbox:
$ 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已经运行,我也会收到相同的错误消息(“无法启动”)。
有什么想法吗?
答案 0 :(得分:3)
默认情况下,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)机制 - 在服务定义中加上“hasstatus => true”。
答案 1 :(得分:1)
为了增加这一点,因为它是一个受欢迎的谷歌打击"木偶无法启动服务",我在CentOS上遇到了类似的问题。事实证明我的问题是由于 sudo :我有
Defaults requiretty
在我的 sudoers 文件中。将此更改为
Defaults requiretty
Defaults:root !requiretty
修复了问题,并允许我的服务脚本(使用sudo运行守护程序)通过puppet工作。
希望这有助于未来的Google员工!