শেফ ব্যবহার করে কীভাবে কোনও পরিষেবা চলছে তা নিশ্চিত করবেন?


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এটি চলমান করে তোলে। তবে এগুলি বহনযোগ্যতার কারণে অ্যান্টি-প্যাটার্নগুলির মতো মনে হয় (এবং পরবর্তী ক্ষেত্রে এটি পুনরায় শুরু করার আগে এটি সম্ভবত থামিয়ে দেওয়া হয়)।

সুতরাং, আমি কীভাবে শেফকে বলছি যে এটি জোর করে পরিষেবা শুরু করতে বলুক, এমনকি যদি এটি মনে করে যে এটি ইতিমধ্যে চালু রয়েছে?

এটি শেফ ১১. using ব্যবহার করছে, ওপসকোড দ্বারা হোস্ট করা এবং ডিফল্ট পোস্টগ্র্যাসকিএল রেসিপি। (নোট এটি অনুরূপ তবে আমি শেফের "আপ টু ডেট" রিসোর্সের উপর কীভাবে বলবৎ করতে পারি তার মতো আমি একেবারে একরকম না বলে মনে করি ? )

--- সম্পাদনা (জটিম্বারল্যান্ড পোস্টের পরে ব্যাখ্যা) ---

-l debugএখানে শো:

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

এমনকি যখন এটি চলছে না। এটি একটি বাগের মতো শোনাচ্ছে এবং আমি এতে আগ্রহী। তবে আমি প্রাথমিকভাবে শেফকে "সর্বদা পরিষেবা শুরু করার আদেশটি উপস্থাপন করে, স্ট্যাটাস চেক এড়িয়ে যাওয়া" বলার উপায় আছে কিনা তা সম্পর্কে আগ্রহী। এখানেই প্রশ্ন।

(আমি কোন বিশেষজ্ঞ নই কিন্তু আমি মনে করি একটি সেবা নিশ্চিত করার জন্য সবচেয়ে পোর্টেবল পথ চলছে সেবা শুরু করার জন্য করা হয় এবং যে প্রায় সবসময় idempotent আছে। OTOH পরীক্ষণ একটি সেবা চলছে কিনা কম সামঞ্জস্যপূর্ণ এবং আমি দেখতে পাচ্ছি না কেন আমরা যত্ন করা উচিত !)

উত্তর:


11

ডিফল্টরূপে, শেফ পরিষেবাটি চালু আছে কিনা তা পরীক্ষা করে দেখবে এবং পরিষেবাটি চালু না থাকলে এটি শুরু করবে।

কীভাবে এটি নির্ধারণ করে যে পরিষেবাটি চলছে তা নির্ভর করে।

ডিফল্টরূপে, শেফ postgresqlব্যবহার করে প্রক্রিয়া সারণীতে পরিষেবার ( এখানে) নামের সাথে মিলের চেষ্টা করবে ps

ps -ef | grep postgresql

মূলত। প্রক্রিয়া সারণীটি পরিদর্শন করার সময় পরিষেবাটির নামটি প্যাটার্ন ম্যাচের জন্য ব্যবহার করা হবে। এটি আপনার যা প্রয়োজন / প্রয়োজন তা নাও হতে পারে, বিশেষত প্ল্যাটফর্মের উপর নির্ভর করে এবং কীভাবে এটি "পোস্টগ্র্যাসকিএল" পরিষেবাটির নাম দেয়।

তবে, আপনি শেফকে বলতে পারেন যে পরিষেবাটি "স্ট্যাটাস" কমান্ডকে সমর্থন করে, যার অর্থ শেফ সাধারণত এমন কিছু করবেন,

/etc/init.d/postgresql status

এবং এটি চলছে কিনা তা নির্ধারণ করতে রিটার্ন কোডটি ব্যবহার করুন (অ-শূন্য চলছে না)।

শেফ এটি ডিফল্টরূপে করেন না কারণ সমস্ত পরিষেবা স্ক্রিপ্টগুলি স্থিতি কমান্ডকে সমর্থন করে না (হতাশ হয়ে), এবং শেফ সহজাতভাবে সঠিকভাবে জানে না যে সঠিক জিনিসটি কী তা করা উচিত। এটি বুদ্ধিমান ডিফল্ট জিনিসটি করার চেষ্টা করে তবে কখনও কখনও নির্বোধ। সুতরাং, আপনি শেফকে বলতে পারেন যে উত্সটির একটি স্ট্যাটাস কমান্ড রয়েছে এবং এটি এতটা নির্বোধ নয়।

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

এখন, যদি পরিষেবাটি আসলে "পোস্টগ্রেস্কল" হিসাবে নাম না করা হয় তবে পরিবর্তে "পোস্টগ্রেক্কেল -২৯" বা অনুরূপ হয় তবে আপনি এটি হিসাবে এটি করতে পারেন:

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বা অনুরূপ করে, অন্যথায় এটি সাধারণত তার নিজস্ব গ্রেপ কমান্ডের সাথে মেলে এবং এইভাবে সর্বদা মনে করে যে পরিষেবাটি চলছে। (বা সম্ভবত এটি অন্তর্নিহিত সমস্যা?)
আংশিক মেঘলা

আমার কাছে মনে হয় শেফের মধ্যে একটি বাগ আছে বা সিস্টেমে কিছু ভুল আছে। আপনি কোন প্ল্যাটফর্ম / প্ল্যাটফর্ম_বর্তনটি চালাচ্ছেন? আপনি কিভাবে পোস্টগ্র্যাস্কেল ইনস্টল করলেন? প্যাকেজ, উত্স?
jtimberman

ঝকঝকে করার জন্য, শেফ ঘোষণামূলক উপায়ে সংজ্ঞায়িত সংস্থানগুলি পরিচালনা করতে আদর্শবান পদক্ষেপ গ্রহণ করে। আপনি যে কোনও পরিষেবা নিশ্চিত করছেন যে ডাব্লু / শেফ চলছে তা সেবার প্রারম্ভিক ক্রিয়াকলাপটি পাঠানো। যদি তা না ঘটে থাকে তবে এটি শেফের একটি বাগ, রেসিপিটিতে একটি বাগ বা সিস্টেমে একটি বাগ।
jtimberman

ধন্যবাদ @ জেটিবারম্যান টিকিট.পসকোড / ব্রাউজ / সিওকে -৩৩৩ এ ভুল স্থিতি ফিরে আসার জন্য আমি একটি বাগ খুলেছি । তবে আমার এখানে প্রশ্নটি হল যে শেফকে পরিষেবা-শুরুর আদেশটি জারি করে স্ট্যাটাস চেক এড়িয়ে যেতে বাধ্য করার কোনও উপায় আছে কি না। service startপ্রায় সবসময় আদর্শবান তাই এটি ঠিক থাকতে হবে।
আংশিক মেঘলা

দুঃখিত, বাগটি টিকিটগুলি রয়েছে odeopscode.com/browse/COOK-3526
আংশিক মেঘলা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.