我有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
。
对此有何帮助?
答案 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代码中几乎已经完成了这个,所以我不希望它能解决你的问题。
虽然有点{{}}}有一些关于木偶故障排除的一般提示。