2013-08-19 8 views
10

में सेवा पुनरारंभ तंत्र मैं दृश्यों के पीछे शेफ की पुनरारंभ तंत्र कैसे काम करता है इस बारे में एक स्पष्टीकरण की तलाश में हूं। मुझे ऑनलाइन इसके लिए कोई दस्तावेज नहीं मिल रहा है, और मैं कोड का पता लगाने की कोशिश कर रहा हूं (ट्रिगर्स डरावनी कार्रवाई-पर-दूरी हैं)।सेवा शेफ

चलिए विशेष रूप से nginx पर देखें, और मान लें कि हम एक शेफ सर्वर का उपयोग कर रहे हैं और chef-solo नहीं (मुझे नहीं पता कि इससे कोई फर्क पड़ता है)।

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

notifies :reload सा मतलब है कि यह एक बार पुनः लोड करने से चलाता है, और :delayed मतलब है कि यह chef-client रन के अंत में क्या होगा:

मैं इस एक नुस्खा में (उदाहरण के लिए) है। दृश्यों के पीछे यह कैसे काम करता है? मुझे निष्पादन धागे के बाद समस्या हो रही है।

कहीं chef-client को service nginx reload या उन पंक्तियों के साथ कुछ चलाना है। यह कहां और कैसे परिभाषित किया गया है?

उत्तर

17

notifies किसी अन्य शेफ संसाधन के लिए कुछ करने के लिए अधिसूचना भेजता है।

आपके उदाहरण में, यह संसाधन service[nginx] से :reload को बता रहा है। service[nginx] एक service resource है जिसका namenginx है।

इस काम के लिए, service[nginx] किसी बिंदु पर आपके नोड के run_list में घोषित किया जाना चाहिए। अन्यथा, शेफ एक त्रुटि फेंक देगा। आमतौर पर यह उपयोगकर्ता द्वारा नुस्खा में या निर्भरता के माध्यम से मैन्युअल रूप से किया जाता है (कहें, application, या nginx कुकबुक)।

वास्तव में कैसे बावर्ची चलाता reload आदेश कैसे service[nginx] संसाधन घोषित किया गया था पर निर्भर करता है, लेकिन आमतौर पर अंतर्निहित ऑपरेटिंग सिस्टम (कि इस जैसे एक उपकरण का उपयोग कर की सुंदरता में से एक है पर निर्भर करता है - यह कई निचले स्तर विवरण सार आप से दूर और आपको कई प्लेटफार्मों में एक ही कोड का उपयोग करने की अनुमति देता है)।

service दस्तावेज की सिंटेक्स अनुभाग में आप इस लगता है:

  • सेवा महाराज ग्राहक महाराज ग्राहक चलाने के दौरान निम्नलिखित प्रदाताओं में से एक का उपयोग करने के लिए कहता है: 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, या Chef::Provider::Service::Macosx। शेफ-क्लाइंट ओहाई द्वारा एकत्र किए गए आंकड़ों के आधार पर रन की शुरुआत में मंच का पता लगाएगा। प्लेटफार्म की पहचान के बाद, शेफ-क्लाइंट सही प्रदाता
+1

निर्धारित करेगा, आप 'restart_command 'सेवा nginx reload'' भी उपयोग कर सकते हैं, लेकिन मैं' प्रदाता ...कम घुसपैठ के रूप में। डॉक्स: http://docs.opscode.com/resource_service.html – alanjds

+0

उसे पुनः लोड करने की आवश्यकता है, इसलिए इसके बजाय 'reload_command' का उपयोग किया जाना चाहिए। – sekrett

+0

@sekrett 'reload_command' को 'सेवा' प्रदाता द्वारा परिभाषित किया जाना होगा। यह 'restart_command' का उपयोग करता है ताकि सामान्य ऑपरेशन': पुनरारंभ करें 'पर ओवरराइड हो, इसलिए नामकरण में कोई फर्क नहीं पड़ता है। –

1

कार्यक्षमता chef doco में वर्णित है।

यदि कॉन्फ़िगरेशन फ़ाइल की सामग्री में परिवर्तन होता है तो यह nginx सेवा का पुनः लोड ट्रिगर करेगा। "देरी" सेटिंग का मतलब है कि शेफ चलाने के अंत में पुनः लोड कार्रवाई होती है। विचार यह है कि एक शेफ रन द्वारा कई विन्यास फाइलें बदल सकती हैं और आप प्रत्येक बदली गई फ़ाइल (जो "तत्काल" विकल्प है) के बजाय अंत में एक एकल रीलोड चाहते हैं।

संबंधित मुद्दे