无法通过 puppet 启动 backuppc 服务

Could not start backuppc service through puppet

我有 backuppc,它由 puppet 处理并使用工头。下面是我的 init.pp 文件:

class backuppc::service {
        if $::operatingsystemcodename == 'squeeze' {
                service { 'backuppc' : ensure => running, hasstatus => false, pattern => '/usr/share/backuppc/bin/BackupPC' }
        } else {
                service { 'backuppc' : ensure => running, hasstatus => true }
        }
        service { 'apache2' : ensure => running }
}

当我在节点上 运行 puppet 时,它会向工头抛出此报告:

class backuppc::service { if $::operatingsystemcodename == 'squeeze' { service { 'backuppc' : ensure => running, hasstatus => false, pattern => '/usr/share/backuppc/bin/BackupPC' } } else { service { 'backuppc' : ensure => running, hasstatus => true } } service { 'apache2' : ensure => running } }

change from stopped to running failed: Could not start Service[backuppc]: Execution of '/etc/init.d/backuppc start' returned 1: Starting backuppc...2016-05-31 17:13:25 Another BackupPC is running (pid 6731); quitting...

节点是 运行 debain squeeze 6.0.10。 有什么帮助吗?

这个……

change from stopped to running failed: Could not start Service[backuppc]: Execution of '/etc/init.d/backuppc start' returned 1: Starting backuppc...2016-05-31 17:13:25 Another BackupPC is running (pid 6731); quitting...

... 表示 puppet 试图以 /etc/init.d/backuppc start 启动 BackupPC,发现该进程已经 运行ning。这表明 puppet 不正确 确定 BackupPC 服务的状态。

我在源代码中找不到对名为 operatingsystemcodename 的事实的引用。工头是否提供此变量,还是您在其他地方定义它?也许您的意思是 lsbdistcodename

如果是这样,并且 $::operatingsystemcodename 未定义,您的条件将始终落入 else 分支,并且资源将使用 hasstatus => true 定义。 Puppet 将尝试使用 /etc/init.d/backuppc status 检查服务是否 运行ning。因此,如果 init 脚本的 status 操作以某种方式被破坏(例如,始终返回非 0 退出代码),puppet 将尝试在每个代理 运行 上启动服务。


首先,我会验证相关节点上的 $::operatingsystemcodename returns 'squeeze'。

如果不是,我将检查 /etc/init.d/backuppc status 在其各种状态下的退出代码,启动时返回零,停止时返回非零。

另一方面,如果 $::operatingsystemcodename 未定义或某些意外值,那么我会选择另一个表达式用于 if 语句。在这种情况下,您还需要在 BackupPC 服务 运行ning 时通过检查进程 table 来验证 pattern attribute 是否正确。


编辑: 或者,您可以为 status attribute 提供一个值,其中包含 puppet 用来检查 BackupPC 服务状态的自定义命令。我希望像 status => 'pgrep -f BackupPC 这样的东西能够很好地工作。虽然,puppet 已经在 ruby 代码中几乎完全做到了这一点,所以我不希望它能解决你的问题。

虽然有点过时 this blog post 涵盖了对人偶进行故障排除的一些一般技巧。