为什么不是';t Chef正在重新加载我的Nginx&;Tomcat文件是否正确?
我正在使用Chef、Tomcat和Nginx来配置我的前端机器,在Tomcat根目录中使用一个.war文件,当它被放在那里并第一次被访问时,该文件会展开。这是我的食谱:为什么不是';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
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上也有同样的问题