【问题标题】:Chef recipe to restart rsyslog重新启动 rsyslog 的厨师配方
【发布时间】:2014-01-21 18:30:36
【问题描述】:

我有一个应该安装模板的配方,然后重新启动服务...

service "rsyslog" do
  supports :restart => true, :reload => true
  action [:enable, :start]
end 

Chef::Log.info("Creating loggly rsyslog conf")
template "/etc/rsyslog.d/22-loggly.conf" do
  source "syslogd.conf.erb"
  mode "0755"
  owner "root"
  group "root"
  notifies :restart, resources(:service => "rsyslog")
end

我为什么会得到:

ERROR: resource template[/etc/rsyslog.d/22-loggly.conf] is configured to notify resource service['rsyslog'] with action restart, but service['rsyslog'] cannot be found in the resource collection. template[/etc/rsyslog.d/22-loggly.conf] is defined in /home/ubuntu/cookbooks/loggly-syslog/recipes/default.rb:7:in `from_file'

[2014-01-03T23:26:37+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

添加配置文件后如何让 rsyslog 重新启动/重新加载??

【问题讨论】:

  • 我刚刚写了一个答案,但是您确定服务资源的定义与您列出的完全一样吗?
  • 我问,因为你可能会遇到我在这里描述的错误:*.com/questions/18370804/…

标签: chef-infra chef-recipe rsyslog


【解决方案1】:

您使用的是旧的通知语法。切换到新语法:

template '...' do
  notifies :restart, 'service[rsyslog]'
end

【讨论】:

  • 公平地说,service document still uses both forms of notification syntax - 我知道如果一个通知完全取代了另一个通知,或者两者都有用例 - foodcritic is so helpful,我感到很困惑。我已经给 docs@getchef 发了邮件,看看他们是否更新了。
  • 太棒了。在我们发言时,他正在处理此案 - 更改将在稍后生效。
  • 是的 - 我正在观察构建过程
  • 我正在使用新语法,但仍然没有运气:模板“...”不通知:restart,“service[mysql]”,:immediately end 由于“service[mysql]在资源集合中找不到”。这在问题的 cmets 中发布的链接 @sethvargo 上有所说明。我不确定如何将此帖子或其他帖子标记为已解决。 :/ 谁能解释在哪里/如何将它添加到集合中?我可以在没有警告的情况下对 php-fpm 做同样的事情:模板 "..." 通知 :restart, "service[php5-fpm]", :immediately end 有人能告诉我我们在这里缺少什么吗??跨度>
  • 更正,“其他”帖子的回答是相关的,但问题不同。