我在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工作。
希望这能帮助未来的谷歌员工!