无法通过木偶启动backuppc服务

时间:2016-05-31 07:48:28

标签: service debian puppet foreman

我有backuppc,由木偶和工头处理。以下是我的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 =>真的}           }           service {'apache2':ensure =>正在运行   }

     

从停止变为运行失败:无法启动服务[backuppc]:执行'/etc/init.d/backuppc start'返回1:启动backuppc ... 2016-05-31 17:13:25另一个BackupPC正在运行(pid 6731);戒烟...

节点正在运行debain squeeze 6.0.10。 对此有何帮助?

1 个答案:

答案 0 :(得分:1)

这......

  

从停止更改为运行失败:无法启动服务[backuppc]:执行' /etc/init.d/backuppc start'返回1:启动backuppc ... 2016-05-31 17:13:25另一个BackupPC正在运行(pid 6731);戒烟...

...表示puppet尝试使用/etc/init.d/backuppc start启动BackupPC,发现该进程已在运行。这表明puppet 错误地确定了BackupPC服务的状态。

我无法在源中找到对名为operatingsystemcodename的因素的引用。工头是否提供此变量,或者您是否在其他地方定义它?也许你的意思是lsbdistcodename

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

首先,我要确认$::operatingsystemcodename返回'挤压'在有问题的节点上。

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

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

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

虽然有点{{}}}有一些关于木偶故障排除的一般提示。

相关问题