সাধারণভাবে, সহজ পদ্ধতির সাথে চেষ্টা করা psএবং grepপ্রদত্ত প্রক্রিয়াটি চলছে কিনা তা নির্ধারণ করার চেষ্টা করা খারাপ ধারণা ।
আপনি এটির pgrepজন্য ব্যবহার করা আরও ভাল হবে :
if pgrep "varnish" >/dev/null; then
echo "Varnish in running"
else
echo "Varnish is not running"
fi
জন্য ম্যানুয়াল দেখুন pgrep। কিছু সিস্টেমে (সম্ভবত লিনাক্সে নেই), আপনি একটি -qপতাকা পাবেন যা একই পতাকার সাথে মিলে যায় grepযার জন্য পুনঃনির্দেশের প্রয়োজন থেকে মুক্তি পেয়ে যায় /dev/null। একটি -fপতাকা রয়েছে যা কেবলমাত্র প্রক্রিয়া নামের পরিবর্তে সম্পূর্ণ কমান্ড লাইনে ম্যাচটি সম্পাদন করে। তোলা যায় ব্যবহার করে একটি নির্দিষ্ট ব্যবহারকারীর একাত্মতার প্রক্রিয়াগুলিতে ম্যাচ সীমিত হতে পারে -u।
ইনস্টল করা pgrepআপনাকে এতে অ্যাক্সেসও দেয় pkillযা আপনাকে তাদের নামের উপর ভিত্তি করে প্রক্রিয়াগুলি সিগন্যাল করার অনুমতি দেয়।
এছাড়াও, যদি এটি কোনও পরিষেবা ডেমন হয় এবং যদি আপনার ইউনিক্স সিস্টেমে তথ্যের জন্য এটি জিজ্ঞাসা করার কোনও উপায় থাকে (যেমন, এটি চালু এবং চলছে কিনা) তবে এটি এটি পরীক্ষা করার সঠিক উপায়।
লিনাক্সে, আপনার ওপেনবিএসডি-তে আছে systemctl( systemctl is-active --quiet varnishএটি চলমান থাকলে 0 ফিরে আসবে) rcctl, ইত্যাদি etc.
এখন আপনার স্ক্রিপ্টে:
আপনার স্ক্রিপ্টে, আপনি আউটপুট পার্স করে ps ax। এই আউটপুটটিতে নিজেই স্ক্রিপ্টের নাম থাকবে, এতে check_varnish_pro.shঅবশ্যই স্ট্রিং রয়েছে varnish। এটি আপনাকে একটি মিথ্যা ইতিবাচক দেয়। আপনি যদি পরীক্ষার সময় -qপতাকা ছাড়াই এটি চালিত করে থাকেন তবে আপনি এটি স্পষ্ট করতে পারতেন grep।
#!/bin/bash
ps ax | grep '[v]arnish'
এটি চালানো:
$ ./check_varnish_pro.sh
31004 p1 SN+ 0:00.04 /bin/bash ./check_varnish_pro.sh
আরেকটি সমস্যা হ'ল যদিও আপনি প্যাটার্নটি ব্যবহার করে grepপ্রক্রিয়াটি grepনিজের দ্বারা সনাক্ত করা থেকে "আড়াল" করার চেষ্টা করছেন [v]। যদি আপনি কোনও ডিরেক্টরিতে স্ক্রিপ্ট বা কমান্ড লাইনটি চালিত করতে চান তবে এর মধ্যে একটি ফাইল বা ডিরেক্টরি রয়েছে varnish(যে ক্ষেত্রে আপনি আবার একটি মিথ্যা ধনাত্মক পাবেন) fail এটি হ'ল কারণ প্যাটার্নটি অনুপযুক্ত এবং শেল এটির সাথে ফাইলের নাম গ্লোববিং করবে।
দেখা:
bash-4.4$ set -x
bash-4.4$ ps ax | grep [v]arnish
+ ps ax
+ grep '[v]arnish'
bash-4.4$ touch varnish
+ touch varnish
bash-4.4$ ps ax | grep [v]arnish
+ ps ax
+ grep varnish
91829 p2 SN+p 0:00.02 grep varnish
ফাইলের উপস্থিতি varnishশেলটি [v]arnishফাইলের সাথে প্রতিস্থাপন করবে varnishএবং আপনি প্রক্রিয়া সারণীতে ( grepপ্রক্রিয়া) প্যাটার্নটিতে হিট পাবেন ।