বাশ স্ক্রিপ্টে আপস্টার্ট কাজের স্থিতি কীভাবে নির্ধারণ করবেন?


10

বাশ স্ক্রিপ্টের অভ্যন্তরে একটি আপস্টার্ট কাজ চলছে কিনা তা আপনি কীভাবে নির্ধারণ করবেন? এরকম কিছু করার জন্য আমার একটি "বুলিয়ান" মান দরকার:

#!/bin/bash
if [ determine_if_job_x_is_running ]; then
  echo "I see upstart job X is running, please stop it before ..."
fi

উত্তর:


9

আপনার নিজস্ব বাশ ফাংশন তৈরি করুন এবং এটি আপনারতে রাখুন ~/.bashrc:

check_upstart_service(){
    status $1 | grep -q "^$1 start" > /dev/null
    return $?
}

আউটপুট পার্সিংয়ের উপায়টি আমি সত্যিই অপছন্দ করি, তবে আমি আর একটি সুস্পষ্ট উপায় দেখতে পাচ্ছি না। এবং এক্ষেত্রে আউটপুটটি <service name> startখুব নির্ভরযোগ্য যেমন এটি আপস্টার্ট ডকুমেন্টেশনে উল্লিখিত হয়েছে ।

এখন আপনি এটি এর মতো ব্যবহার করতে পারেন:

if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi

2
আপনি status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/nullএটি নিস্তব্ধ তা নিশ্চিত করার জন্য এটিকে সংশোধন করতে চাইতে পারেন ।
ডেভিড জি

1

সাধারণত আপনি একটি পিআইডি ফাইল ব্যবহার করেন তবে আপনার প্রক্রিয়াগুলি পরীক্ষা করার জন্য আপনি পিগ্রিপ ব্যবহার করতে পারেন। ধরে নিন আপনার পরিষেবাটিকে বলা হয় jobXএটি কাজ করবে:

if [ $(pgrep jobX) ]; then

বা আরও ভাল

if pgrep jobX > /dev/null 2>&1

1

স্ট্রিংয়ের উপর ভিত্তি করে ব্যাশে রয়েছে :

job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
  then
    # do whatever you need
  else
    # do whatever you need
fi

আমার প্রথম প্রেরণা ছিল কোডিয়ালরোবট সরবরাহ করা কোডের বিভিন্নতা ব্যবহার করা

job='your_job_name'
dbus-send --system --print-reply --dest=com.ubuntu.Upstart \
  /com/ubuntu/Upstart/jobs/${job}/_ \
  org.freedesktop.DBus.Properties.Get string:'' string:state

যা কিছু ফিরে আসবে

পদ্ধতি রিটার্ন প্রেরক =: 1.0 -> গন্তব্য =: 1.94 উত্তর_সারিয়াল = 2 ভেরিয়েন্ট স্ট্রিং "চলমান"

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

status ${job} যখন এই জাতীয় কোনও কাজ না হয় তবে ক্ষেত্রেটি বাদ দিয়ে স্থিতি 1 দিয়ে কখনই প্রস্থান করতে পারবেন না।


1
একটি প্রকরণ ... isRunning = $ (স্থিতি $ {কাজ} | গ্রেপ চলমান | ডাব্লুসিসি-এল) চলমান থাকলে 1 এবং যদি তা 0 হয় তবে ফিরে আসবে।
নারায়ণ

0

আপনি সেই নির্দিষ্ট পরিষেবার স্থিতিটি জিজ্ঞাসা করতে DBUS ব্যবহার করবেন।

$ job=myjob
$ dbus-send --system --print-reply --dest=com.ubuntu.Upstart /com/ubuntu/Upstart/jobs/${job}/_ org.freedesktop.DBus.Properties.GetAll string:''

http://upstart.ubuntu.com/cookbook/#get-status-of-job-via-d-bus

মনে রাখবেন যে আপনি যদি নিজের আপস্টার্ট কাজটি লিখে থাকেন তবে আপনার পরিবর্তে আপস্টার্ট ইভেন্ট বা প্যাকেজ নির্ভরতা ব্যবহার করা উচিত।


দেখে মনে হচ্ছে এটি কেবল কিছু প্রকারের পাঠ্য স্থিতি মুদ্রণ করবে যা আপনাকে তখন বুলিয়ান মান পেতে পার্স করতে হবে, তাই না?
লাসলোহ

0

দেখে মনে হচ্ছে আপসস্টার্ট স্ট্যাটাস কমান্ডটি লিনাক্স স্ট্যান্ডার্ড বেস প্রকল্পের সূচনা স্ক্রিপ্টের সাথে সম্মতি জানায়, এর অর্থ আপনি 0 এর একটি প্রস্থান কোড ধরে নিতে পারেন মানে প্রোগ্রামটি চলছে, 1-3 এর একটি বহির্গমন কোড মানে এটি চলছে, এবং যে কোনও অন্যান্য প্রস্থান কোড মানে একটি অনির্ধারিত স্থিতি।

দেখুন: http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.