我如何确保如果通过 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
}