Service 无法通过puppet启动backuppc服务

Service 无法通过puppet启动backuppc服务,service,debian,puppet,foreman,Service,Debian,Puppet,Foreman,我有backuppc,它由puppet处理,也由foreman处理。下面是我的init.pp文件: class backuppc::service { if $::operatingsystemcodename == 'squeeze' { service { 'backuppc' : ensure => running, hasstatus => false, pattern => '/usr/share/backuppc/bi

我有backuppc,它由puppet处理,也由foreman处理。下面是我的
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时,它会向foreman抛出以下报告:

类backuppc::service{ 如果$::operatingsystemcodename=='Squence'{ 服务{'backuppc':确保=>正在运行,hasstatus=>false,pattern=>'/usr/share/backuppc/bin/backuppc'} }否则{ 服务{'backuppc':确保=>正在运行,hasstatus=>true} } 服务{'apache2':确保=>running} }

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

节点正在以
debain squeeze 6.0.10运行。
有什么帮助吗?

这个

从停止更改为运行失败:无法启动服务[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
的事实的引用。foreman提供了这个变量,还是您在其他地方定义了它?也许你的意思是

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


因此,首先,我要验证
$::operatingsystemcodename
是否在相关节点上返回“挤压”

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

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


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


虽然有点过时,但它涵盖了一些常见的木偶故障排除技巧

是,
操作系统代码名
由工头提供
/etc/init.d/backuppc status
backuppc 3.1.0-9.1
中不受支持,因此
hasstatus=>true
不值得使用它。在这种情况下,如果您确定
operatingsystemcodename
返回“挤压”,我将更仔细地查看第一个条件分支中的
模式
属性。当
hasstatus=>false
且未提供
status
属性时,puppet将尝试匹配进程表中
模式
属性的值(请参阅)。另一方面,如果您不确定
operatingsystemcodename
是否返回“挤压”,我将粘贴
通知{“检测到挤压”${::operatingsystemcodename}:}
在您的代码中的某个地方。我对foreman不是特别熟悉,它可能会提供一种更方便的方法来确定遵循哪个条件分支。不确定。是的,我对
操作系统代码名有把握,foreman返回“挤压”,我已经在我的开发环境中对其进行了测试。您认为我的代码有问题吗<代码>模式