无法通过 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 涵盖了对人偶进行故障排除的一些一般技巧。
我有 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 涵盖了对人偶进行故障排除的一些一般技巧。