puppet:配置文件修改后强制重启服务

puppet:配置文件修改后强制重启服务

我如何确保如果通过 puppet 将新版本的配置文件从主存储库下载到其中一个托管服务器时,相关服务会重新启动。

典型场景 - 假设有新的 munin 或 apache 配置。puppet 客户端发现它,覆盖本地文件...并且... - 如何确保服务重新启动/重新加载?

多谢!

答案1

通知的另一种方法是订阅:

file { "/etc/sshd_config":
    source => "....",
}

service { sshd:
    ensure => running,
    subscribe => File["/etc/sshd_config"],
}

不同之处在于关系是从另一端描述的。例如,您可能让 apache 订阅 /etc/apache/httpd.conf,但您会让 vhost 文件通知 apache,因为您的 apache 类不会知道您拥有的每个 vhost。

类似的双端情况也适用于 require 和 before。这只是在特定情况下哪个更有意义的问题。

正如 Chad 提到的,如果您发现 puppet 不断尝试启动您的服务,那么您需要添加一个模式参数,这是一个应用于进程列表的正则表达式。默认情况下,puppet 将执行停止和启动以重新启动服务。如果您添加“hasrestart => true”,那么它将使用“restart”参数中指定的命令来重新启动服务。

答案2

我似乎发现了一些东西:

file { "/etc/sshd_config":
    source => "....",
    notify => Service[sshd]
}

service { sshd:
    ensure => running
}

我们将看看它将如何发挥作用。无论如何,欢迎您就此主题发表您的想法。

答案3

(我知道这是一个非常老的问题,但我只是想提出我的看法,并提出一种(我认为)更简单的方法来解决这个问题)

也可以随意使用箭头符号:

file { "/etc/sshd_config":
  source => "....",
} ~>
service { sshd:
  ensure => running
}

或者

File['/etc/sshd_config'] ~> Service['sshd']

答案4

有多种等效符号:

通知

file { '/etc/sshd_config':
    notify => Service[sshd],
}

service { sshd:
    ensure => running
}

订阅

file { '/etc/sshd_config':
   ...
}

service { sshd:
    ensure => running,
    subscribe => File['/etc/sshd_config'],
}

箭头符号

File['/etc/sshd_config'] ~> Service['sshd']

链接声明

file { '/etc/sshd_config':
   ...
}
~> service { sshd:
    ensure => running,
}

如果您想要触发reload而不是restart,请调整服务声明:

service { sshd:
    ensure => running,
    restart => 'pkill -HUP sshd', # if service support such reload
}

相关内容