为什么不是';t Chef正在重新加载我的Nginx&;Tomcat文件是否正确?

为什么不是';t Chef正在重新加载我的Nginx&;Tomcat文件是否正确?,tomcat,nginx,chef-infra,Tomcat,Nginx,Chef Infra,我正在使用Chef、Tomcat和Nginx来配置我的前端机器,在Tomcat根目录中使用一个.war文件,当它被放在那里并第一次被访问时,该文件会展开。这是我的食谱: include_recipe 'selinux::disabled' %w{curl zip unzip tomcat7 lynx mysql-client}.each do |pkg| package pkg do action :install end end package 'nginx' do a

我正在使用Chef、Tomcat和Nginx来配置我的前端机器,在Tomcat根目录中使用一个.war文件,当它被放在那里并第一次被访问时,该文件会展开。这是我的食谱:

include_recipe 'selinux::disabled'

%w{curl zip unzip tomcat7 lynx mysql-client}.each do |pkg|
  package pkg do
    action :install
  end
end

package 'nginx' do
  action :install
end

service 'tomcat7' do
  service_name 'tomcat7'
  supports :restart => true, :status => true
  action [:start, :enable]
end

service 'nginx' do
  action [ :enable, :start ]
end

cookbook_file "/usr/share/nginx/html/index.html" do
  source "index.html"
  mode "0644"
end

execute "setsebool -P httpd_can_network_connect 1" do
  only_if "getsebool -a | grep 'httpd_can_network_connect --> off'"
end

user 'nginx' do
  comment 'nginx user'
  system true
  shell '/bin/false'
end

template "/etc/nginx/nginx.conf" do
  source "nginx.conf.erb"
  mode '0644'
  owner 'root'
  group 'root'
  notifies :reload, 'service[nginx]', :delayed
end

[ bunch of stuff copying the .war file in ]

service 'tomcat7' do
  action :restart
end


execute "reload nginx" do
  command "nginx -s reload"
  action :nothing
end
而且效果很好。它甚至在结束时正确地重新加载nginx-以下是运行的结束:

ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com   * service[tomcat7] action restart
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com     - restart service service[tomcat7]
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com   * service[nginx] action reload
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com     - reload service service[nginx]
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com   * service[nginx] action reload
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com     - reload service service[nginx]
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com Running handlers:
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com Running handlers complete
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com Chef Client finished, 17/25 resources updated in 171.195633435 seconds
一切都设置好了,但是当我加载页面时,我得到了默认的nginx页面,就好像nginx没有正确地获取配置文件一样。文件肯定在那里,而且格式良好。我去执行:

sudo nginx -t
而且效果很好。然后,当我终于找到了一切,一切看起来都很好,我所做的就是:

sudo nginx -s reload
一切正常。这让我相信,当涉及到重新加载nginx时,Chef并没有做正确的事情,但我一辈子都搞不清楚这是什么

更新


根据SlayedByLucifer的建议,我现在通过使用命令重新加载来结束配方,但它仍然不起作用

TLDR;可能是由于nginx配置中的配置问题造成的,比如提供错误的
listen
指令

更长的回答; 我也遇到了同样的问题,结果发现问题出在我的nginx配置中。奇怪的是,当我从服务器上的shell手动使用
服务重新加载nginx
时,它重新加载得很好。通过chef执行同样的操作是行不通的

在我的例子中,当我还试图从Chef计划重新启动nginx时,它不起作用的原因变得很明显,这将开始抛出错误,如
[::]:80失败(98:地址已在使用)
。 我通过替换我的
listen 80解决了这个问题;听[:]:80仅使用
侦听[:]:80


有关更深入的答案,请参阅以下文章:

服务
资源中的
重新加载
操作与
nginx-s重新加载
并不完全等效。手动测试时,不要运行
nginx-s reload
并尝试使用
service nginx reload
命令重新加载。如果你仍然面临同样的问题,那么这不是厨师的问题。但是如果它解决了这个问题,那么你应该提交一个chef bug.Hmph。。。我被难住了。我现在已经更新了上面的命令,使其包含内联命令,但它仍然不起作用。我必须延迟运行它吗?不需要使用
nginx-s reload
。你在用什么发行版?张贴厨师日志,让我们知道发生了什么事。你能说更多关于张贴日志的内容吗?我使用的是Ubuntu 14.04。我发布了上面的输出。嗨,亲爱的,有什么进展吗?我在ubuntu 14.04和nginx上也有同样的问题