পুতুলের কোনও পরিষেবার জন্য কাস্টম স্থিতি কমান্ড কীভাবে ব্যবহার করবেন?


10

আমি ব্যাকপোর্টগুলি থেকে পোস্টগ্রেএসকিউএল 9.1 এর সাথে ডিবিয়ান স্কিজে ব্যবহার করছি। পুতুলের সংস্করণ 2.7.14 রয়েছে। দুর্ভাগ্যজনকভাবে init স্ক্রিপ্টটি স্থিতির জন্য ভুল প্রস্থান কোডটি দেয়। অতএব statusপোস্টগ্র্রেস্কেল চালিত হচ্ছে কিনা তা সনাক্ত করার জন্য আমি একটি কাস্টম কমান্ড লিখেছি ।

service { 'postgresql':
  ensure => running,
  enable => true,
  hasstatus  => false,
  hasrestart => true,
  status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if ($4 != \"online\") rc=3} END { exit rc }'",
  provider => debian,
}

আমার কমান্ডটি আকর্ষণের মতো কাজ করে, তবে পুতুলের কোনও সমস্যা আছে বলে মনে হচ্ছে। notice: /Stage[main]/Postgresql/Service[postgresql]/ensure: ensure changed 'stopped' to 'running'এটি সর্বদা চালু থাকলেও আমি সর্বদা পাই ।

সুতরাং নিম্নলিখিত চেষ্টা:

service { 'postgresql':
  ensure => running,
  enable => true,
  hasstatus  => false,
  hasrestart => true,
  status => "exit 0",
  provider => debian,
}

আমি যেমন এই কাস্টম statusকমান্ডটি বুঝতে পেরেছি , পুতুলের সর্বদা মনে করা উচিত যে পোস্টগ্র্যাস্কল চলছে। তবুও পুতুল পোস্টগ্র্যাসকিএল শুরু করার চেষ্টা করে - প্রতিবার।

কি আমার দোষ? নাকি পুতুলের মধ্যে এটি একটি বাগ?


আপনার ম্যানিফেস্টটি সঠিক দেখাচ্ছে, তাই পুতুলের মধ্যে এটি বাগের মতো শোনাচ্ছে। এটি একটি দীর্ঘ শট, তবে সেটিংস চেষ্টা করুন provider => init(এবং enableপ্যারামিটারটি সরিয়ে দিন )।
মিগ্রোর্ভেন

2
আপনি কি নিশ্চিত যে প্রস্থান 0 একটি বৈধ আদেশ? প্রস্থান কমান্ডটি সাধারণত শেলের অভ্যন্তরে থাকে। আপনার কি bash -c 'প্রস্থান 0' এর মতো কিছু করার দরকার আছে?
জোরডাচি

@ জোরেদাছে আপনি ঠিক বলেছেন Sh -c 'প্রস্থান 0' statusএর সাথে পুতুলের কমান্ড প্রত্যাশা অনুযায়ী কাজ করে!
এমএম

উত্তর:


6

আমার সর্বোত্তম অনুমানগুলি $4হ'ল আপনার কমান্ডের মধ্যে পুতুলের নিজস্ব প্রদাহ দ্বারা গ্রাস করা exit 0হচ্ছে এবং শেল ইন্টারঅ্যাকশন ইস্যুগুলির কারণে এটি ঠিক কাজ করে না।

আমি কয়েকটা জিনিস চেষ্টা করতাম

  1. সমস্যাটি $4যদি আপনার কমান্ডের মধ্যে পুতুলের দ্বিখণ্ডিততা থেকে বেরিয়ে $যায়: status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if (\$4 != \"online\") rc=3} END { exit rc }'"(কখনও কখনও আরও ব্যাকস্ল্যাশগুলির প্রয়োজন হয় তবে আমি নিশ্চিত যে এখানে 1 যথেষ্ট)।
  2. পরীক্ষা কমান্ডটি সত্যই সঠিকভাবে কাজ করছে তা নিশ্চিত করুন। exitএটি একটি শেল অভ্যন্তরীণ এবং আমি নিশ্চিত না পুতুল কীভাবে এটি ব্যবহার করবে। সুতরাং পরিবর্তে ক্যানোনিকাল "রিটার্ন সাফল্য" কমান্ডটি ব্যবহার করুন:status => "/bin/true"
  3. হতে পারে এর statusদ্বারা ওভাররাইড হচ্ছে provider => debian(যা একটি পুতুল বাগ হবে), সুতরাং পরিবর্তে সমস্ত কমান্ড নির্দিষ্ট করুন এবং বেস সরবরাহকারী ব্যবহার করুন (তবে এটি সঠিকভাবে সক্ষম হবে না):

    service { 'postgresql':
      provider => base,
      ensure   => 'running',
      start    => '/etc/init.d/postgresql start',
      restart  => '/etc/init.d/postgresql restart',
      stop     => '/etc/init.d/postgresql stop',
      status   => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if (\$4 != \"online\") rc=3} END { exit rc }'",
    }
    

অন্য একটি জিনিস: ধরণের অনুরূপ exec, আমি মনে করি পুতুলকে এক্সিকিউটেবলের জন্য পুরো পথ প্রয়োজন। আপনার statusলাইনে পুরো পথে সেগুলি সেট করার চেষ্টা করুন , যদি আপনি বিশ্বব্যাপী একটি সেট না করে থাকেন?
শেন ম্যাডেন

@ শানেম্যাডেন: পুতুলের অগত্যা কমান্ডগুলির জন্য পুরো পথের প্রয়োজন নেই, যদিও ধরে নিই যে এটির প্রয়োজন তাদের কোনও ক্ষতি করে না। কিছু ধরণের ডিফল্ট পাথের পাশাপাশি (পরিবেশ ডেমোনে PATH শুরু হয়েছিল?) execএকটি pathপ্যারাম গ্রহণ করে এবং আপনি Exec { path => '/usr/bin:/bin' }বা এর সাথে একটি ডিফল্ট পাথ সেট করতে পারেন Exec { path => ['/usr/bin'],['/bin']}। পরিষেবাটিতে একই ধরণের 'পাথ' রয়েছে তবে এটি সাধারণত শেল-স্টাইলের কমান্ড অনুসন্ধানের পাথের পরিবর্তে আরম্ভ স্ক্রিপ্টগুলি সন্ধানের জন্য নির্দিষ্ট সরবরাহকারীদের সাথে ব্যবহৃত হয় বলে মনে হয়।
ফ্রেইহাইট

1
ধন্যবাদ! এর বিরক্তি $4সমস্যা ছিল। আমি এটি দিয়ে প্রতিস্থাপন করেছি \$4এবং এখন সবকিছু প্রত্যাশা অনুযায়ী কাজ করে :)
More
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.