2013-08-19 31 views
10

Tôi đang tìm kiếm giải thích về cách cơ chế khởi động lại của đầu bếp hoạt động sau hậu trường. Tôi không thể tìm thấy bất kỳ tài liệu nào cho nó trực tuyến, và tôi đã bị mắc kẹt cố gắng để theo dõi mã (kích hoạt là ma quái hành động-at-a-distance).Cơ chế khởi động lại dịch vụ trong đầu bếp

Hãy xem cụ thể tại nginx và giả sử chúng tôi đang sử dụng máy chủ đầu bếp chứ không phải chef-solo (Tôi không biết điều đó có tạo nên sự khác biệt hay không).

Tôi có điều này (ví dụ) trong một công thức:

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

Bit notifies :reload nghĩa là nó gây ra một tải lại, và :delayed có nghĩa là nó sẽ xảy ra vào cuối của chef-client chạy. Làm thế nào mà làm việc đằng sau hậu trường? Tôi đang gặp sự cố sau chuỗi thực hiện.

Một nơi nào đó chef-client phải chạy service nginx reload hoặc gì đó dọc theo các dòng đó. Nó được xác định ở đâu và như thế nào?

Trả lời

17

notifies gửi thông báo cho một tài nguyên đầu bếp khác để làm điều gì đó.

Trong ví dụ của bạn, mã này cho biết tài nguyên service[nginx] đến :reload. service[nginx]service resourcenamenginx.

Để làm việc này, service[nginx] phải được khai báo trong nút của bạn run_list tại một số thời điểm. Nếu không, đầu bếp sẽ ném một lỗi. Thông thường, việc này được thực hiện theo cách thủ công trong công thức của người dùng hoặc thông qua một phụ thuộc (ví dụ: application hoặc sách dạy nấu ăn nginx).

Chính xác như thế nào Chef chạy lệnh reload phụ thuộc vào cách thức tài nguyên service[nginx] được tuyên bố, nhưng nó thường phụ thuộc vào hệ điều hành cơ bản (đó là một trong những nét đẹp của việc sử dụng một công cụ như thế này - nó tóm tắt nhiều chi tiết cấp dưới cách xa bạn và cho phép bạn sử dụng cùng một mã trên nhiều nền tảng).

Trong Cú pháp phần của tài liệu service bạn tìm thấy điều này:

  • dịch vụ cho các đầu bếp-client sử dụng một trong những nhà cung cấp sau đây trong thời gian chạy đầu bếp-client: Chef::Provider::Service::Init, Chef::Provider::Service::Init::Debian, Chef::Provider::Service::Upstart, Chef::Provider::Service::Init::Freebsd, Chef::Provider::Service::Init::Gentoo, Chef::Provider::Service::Init::Redhat, Chef::Provider::Service::Solaris, Chef::Provider::Service::Windows hoặc Chef::Provider::Service::Macosx. Đầu bếp-khách hàng sẽ phát hiện nền tảng khi bắt đầu chạy dựa trên dữ liệu được thu thập bởi Ohai. Sau khi xác định nền tảng, đầu bếp-khách hàng sẽ xác định nhà cung cấp chính xác
+1

Bạn cũng có thể sử dụng 'restart_command 'service nginx reload'', nhưng tôi thấy' nhà cung cấp ...'ít xâm phạm hơn. Tài liệu: http://docs.opscode.com/resource_service.html – alanjds

+0

Anh ấy cần tải lại, do đó, 'reload_command' nên được sử dụng thay thế. – sekrett

+0

@sekrett 'reload_command' sẽ phải được nhà cung cấp' dịch vụ' xác định. Nó sử dụng 'restart_command' để ghi đè lên những gì hoạt động bình thường sẽ xảy ra khi': restart', do đó việc đặt tên không hoàn toàn tạo nên sự khác biệt. –

1

Chức năng được mô tả trong chef doco.

Nếu nội dung của tệp cấu hình thay đổi điều này sẽ kích hoạt tải lại dịch vụ nginx. Cài đặt "trì hoãn" có nghĩa là hành động tải lại xảy ra ở cuối đầu bếp. Ý tưởng là có thể có một số tập tin cấu hình thay đổi bởi một đầu bếp chạy và bạn muốn tải lại một lần ở cuối thay vì cho mỗi tập tin thay đổi (đó là "ngay lập tức" tùy chọn).

Các vấn đề liên quan