शेफ का उपयोग करके, यह सुनिश्चित करने के लिए कि कोई सेवा कैसे चल रही है?


10

मैं ऐसी स्थिति में हूं जहां बावर्ची एक सेवा शुरू कर सकता है (पोस्टग्रेज कर सकता है) लेकिन बाद में इसे बंद कर दिया जा सकता है। मैं चाहता हूं कि बाद में शेफ चलाने के लिए सेवा चल रही हो। मैंने यह कोशिश की है:

service "postgresql" do
    action :start
end

लेकिन इसका कोई प्रभाव नहीं है, (up to date)शायद इसलिए क्योंकि शेफ जानता है कि इसे शुरू कर दिया गया है और यह बताने में सक्षम नहीं है कि यह बंद हो गया है। (संभवतः service ... statusइस सेवा के लिए कैसे व्यवहार किया जाए?) यदि मैं यह लिखता हूं:

# anti-pattern warning!
execute "force-start-postgresql" do
  command "service postgresql start || /etc/init.d/postgresql start"
  action :run
end

मुझे मनचाहा व्यवहार मिलता है। इसके अलावा action :restartयह चल रहा है। हालाँकि पोर्टेबिलिटी (और बाद के मामले में इसे फिर से शुरू करने से पहले इसे रोकना) के कारण ये विरोधी पैटर्न की तरह प्रतीत होते हैं।

तो, मैं शेफ से कैसे कह सकता हूं कि वह जबरन सेवा शुरू कर दे, भले ही उसे लगे कि यह पहले से ही चल रहा है?

यह OpsCode द्वारा होस्ट किए गए शेफ 11.6 का उपयोग कर रहा है, और डिफ़ॉल्ट पोस्टग्रेसल नुस्खा। (ध्यान दें कि यह समान है लेकिन मुझे नहीं लगता कि Cheoff में "अप टू डेट" संसाधनों पर कार्रवाई को कैसे बाध्य किया जाए ।)

--- EDIT (jtimberland पोस्ट के बाद स्पष्टीकरण) ---

-l debugयहाँ से पता चलता है:

DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running

तब भी जब यह नहीं चल रहा है। तो यह एक बग की तरह लगता है, और मुझे इसमें दिलचस्पी है। हालाँकि मुझे मुख्य रूप से दिलचस्पी है कि क्या शेफ को बताने का एक तरीका है "हमेशा स्टेटस चेक को छोड़ना, सर्विस स्टार्ट कमांड को इनवाइट करना"। यहीं सवाल है।

(मैं कोई विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि सेवा सुनिश्चित करने के लिए सबसे पोर्टेबल तरीका सेवा शुरू करना है और यह लगभग हमेशा ही बेकार है। ओटीओएच जाँच कर रहा है कि क्या सेवा चल रही है कम सुसंगत है और मुझे नहीं लगता कि हमें क्यों परवाह करनी चाहिए !)

जवाबों:


11

डिफ़ॉल्ट रूप से, यदि सेवा चल रही है, तो Chef जाँच करेगा और यदि सेवा नहीं चल रही है, तो उसे प्रारंभ करेगा।

यह कैसे निर्धारित करता है कि सेवा चल रही है निर्भर करता है।

डिफ़ॉल्ट रूप से, शेफ postgresqlका उपयोग करके प्रक्रिया तालिका में सेवा के नाम ( यहां) का मिलान करने का प्रयास किया जाएगा ps

ps -ef | grep postgresql

अनिवार्य रूप से। सेवा का नाम प्रक्रिया तालिका का निरीक्षण करते समय पैटर्न मैच के लिए उपयोग किया जाएगा। यह हो सकता है या नहीं हो सकता है कि आप क्या चाहते हैं / आवश्यकता, विशेष रूप से मंच पर निर्भर करता है और यह कैसे "postgresql" सेवा का नाम देता है।

हालांकि, आप शेफ को बता सकते हैं कि सेवा एक "स्थिति" कमांड का समर्थन करती है, जिसका अर्थ है कि शेफ आम तौर पर कुछ ऐसा करेगा,

/etc/init.d/postgresql status

और यह निर्धारित करने के लिए कि यह चल रहा है या नहीं (गैर-शून्य नहीं चल रहा है) रिटर्न कोड का उपयोग करें।

बावर्ची डिफ़ॉल्ट रूप से ऐसा नहीं करता है क्योंकि सभी सेवा स्क्रिप्ट एक स्थिति कमांड (निराशा से) का समर्थन नहीं करते हैं, और बावर्ची को सहज रूप से पता नहीं है कि क्या करना सही है। यह सामान्य डिफ़ॉल्ट बात करने की कोशिश करता है, लेकिन कभी-कभी भोली। इस प्रकार, आप शेफ को बता सकते हैं कि संसाधन की स्थिति कमांड है और इतनी भोली नहीं है।

service "postgresql" do
  supports :status => true
  action :start
end

अब, यदि सेवा को वास्तव में "पोस्टग्रैक्स्ल" नाम नहीं दिया गया है, लेकिन इसके बजाय "पोस्टग्रैक्स्ल -92" या इसी तरह का है, तो आप इसे इस प्रकार कर सकते हैं:

service "postgresql-92" do
  supports :status => true
  action :start
end

या

service "postgresql" do
  service_name "postgresql-92"
  supports :status => true
  action :start
end

आप डिबग आउटपुट के साथ शेफ को चलाकर अधिक विस्तार से जान सकते हैं कि क्या है:

chef-client -l debug

यह उपयोगी है, लेकिन सवाल का जवाब नहीं देता है। मैं करने के लिए यह बताना चाहता हूँ :start पर ध्यान दिए बिना की :status। इसके अलावा, मुझे आशा है कि यह एक ps -ef | grep [p]ostgresqlया समान है, अन्यथा यह आमतौर पर अपने स्वयं के grep कमांड से मेल खाता है और इस प्रकार हमेशा सोचता है कि सेवा चल रही है। (या हो सकता है कि यह अंतर्निहित समस्या है?)
आंशिक रूप से बदली

यह मुझे लगता है कि शेफ में एक बग है, या सिस्टम पर कुछ गलत है। आप किस प्लेटफ़ॉर्म / प्लेटफ़ॉर्म_वर्सन पर चल रहे हैं? आपने postgresql कैसे स्थापित किया? पैकेज, स्रोत?
jtimberman

सफेद करने के लिए, शेफ एक घोषित तरीके से परिभाषित संसाधनों का प्रबंधन करने के लिए उदासीन कार्रवाई करता है। जिस तरह से आप यह सुनिश्चित करते हैं कि कोई सेवा w / Chef चल रही है, सेवा को प्रारंभ कार्रवाई भेजना है। यदि ऐसा नहीं हो रहा है, तो यह शेफ में एक बग, नुस्खा में एक बग या सिस्टम पर एक बग है।
jtimberman

धन्यवाद @jtimberman मैं गलत की स्थिति के लिए एक बग पर लौटाए जाने खोल दिया है tickets.opscode.com/browse/COOK-334 । हालांकि मेरा सवाल यहां है कि क्या शेफ को सर्विस-स्टार्ट कमांड जारी करने के लिए स्टेटस चेक स्किप करने का कोई तरीका है। service startयह लगभग हमेशा बेकार है इसलिए यह ठीक होना चाहिए।
आंशिक रूप से बादल छाए रहेंगे

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.