Dưới đây là templete của tôi cho nginx.Đầu bếp, cách chạy mẫu tạo tập lệnh init.d trước khi dịch vụ được tạo
Tôi đang đối mặt với giao lộ 22. Tôi cần cài đặt mẫu init.d. Vì vậy, tôi có một mẫu nginx erb mà tôi đặt trong /etc/init.d/nginx.
Tôi thậm chí đã thử đặt mã lên trên công thức. Công thức phụ thuộc vào file init.d nhưng nó không exectued cho đến khi nó là quá muộn và kết quả là tôi nhận được lỗi này:
STDERR: update-rc.d: /etc/init.d/nginx: file does not exist
---- End output of "bash" "/tmp/chef-script20120330-26326-3ologp-0" ----
Ran "bash" "/tmp/chef-script20120330-26326-3ologp-0" returned 1
[Fri, 30 Mar 2012 06:22:15 +0000] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[Fri, 30 Mar 2012 06:22:15 +0000] ERROR: Sleeping for 60 seconds before trying again
Trên đường chạy trốn tiếp theo của khách hàng đầu bếp, mọi thứ hoạt động bởi vì sau đó các templete là tạo.
Làm cách nào để thực thi mẫu ngay trước khi tôi đăng ký tài nguyên dịch vụ cho nginx? Một sửa chữa nhanh chóng là tôi tạo ra một công thức mà sẽ chạy các mẫu trước khi nginx để cài đặt các mẫu nhưng điều đó có vẻ khá vô lý.
Tempate này cần phải được cài đặt trước khi dịch vụ được đăng ký.
template "nginx" do
path "/etc/init.d/nginx"
source "nginx.erb"
owner "root"
group "root"
mode "0755"
end
Sau đó đăng ký máy chủ.
service "nginx" do
supports :restart => true, :start => true, :stop => true, :reload => true
action [ :enable, :start]
end
####################################
#Install Nginx
####################################
#http://wiki.nginx.org/HttpLuaModule#Installation
version = node[:nginx][:version]
package "libpcre3" do
action :install
end
package "libpcre3-dev" do
action :install
end
package "libpcre++-dev" do
action :install
end
package "openssl" do
action :install
end
template "nginx" do
path "/etc/init.d/nginx"
source "nginx.erb"
owner "root"
group "root"
mode "0755"
end
#mkdir /var/log/nginx
directory "/var/log/nginx" do
owner "root"
group "root"
mode "0755"
action :create
#not_if "test -f /etc/nginx/lock"
end
remote_file "/tmp/nginx-#{version}.tar.gz" do
source "http://nginx.org/download/nginx-#{version}.tar.gz"
checksum node[:nginx][:checksum]
action :create_if_missing
notifies :run, "bash[install_nginx]", :immediately
end
bash "install_nginx" do
user "root"
cwd "/tmp"
code <<-EOH
tar -xvf nginx-#{version}.tar.gz
cd nginx-#{version}
./configure --with-http_stub_status_module
make -j2
make install
ln -s /usr/local/nginx/conf/ /etc/nginx
/usr/sbin/update-rc.d -f nginx defaults
EOH
action :nothing
creates "/usr/sbin/nginx"
notifies :restart, "service[nginx]"
#not_if "test -f /etc/redis/lock"
end
service "nginx" do
supports :restart => true, :start => true, :stop => true, :reload => true
action [ :enable, :start]
end
#ln -s /usr/local/nginx/conf/ /etc/nginx
#link "/usr/local/nginx/conf/" do
# to "/etc/nginx"
# link_type :hard
#end
link "/usr/local/nginx/logs/access.log" do
to "/var/log/nginx/access.log"
end
link "/usr/local/nginx/logs/error.log" do
to "/var/log/nginx/error.log"
end
file "/etc/nginx/lock" do
owner "root"
group "root"
mode "0755"
action :create_if_missing
end
template "nginx.conf" do
path "/etc/nginx/nginx.conf"
source "nginx.conf.erb"
owner "root"
group "root"
mode "0644"
#notifies :reload, "service[nginx]"
notifies :reload, resources(:service => "nginx"), :immediately
end
Cảm ơn
Nếu tài nguyên mẫu quyết định rằng nó không cần phải thực hiện (ví dụ: nếu các tập tin sẽ không được thay đổi) thì 'notifies' không xảy ra. Vì vậy, với cách tiếp cận này có thể, tùy thuộc vào ứng dụng của bạn, rằng dịch vụ của bạn sẽ không bao giờ được thiết lập hoặc bắt đầu ngay cả khi ứng dụng của bạn được thiết lập đầy đủ và sẵn sàng hoạt động. – wberry
vì vậy để có được xung quanh mà bạn sẽ có một "dịch vụ" nginx "do..' gọi bên dưới các cuộc gọi mẫu mà không một' hành động: bắt đầu' phải không? Đó có phải là cách ưu tiên để xử lý vấn đề có thể bạn vạch ra hoặc có cách nào duyên dáng hơn không? – red888