আপনি যা চান তা করতে আপনি এই স্ক্রিপ্টের একটি পরিবর্তিত সংস্করণ ব্যবহার করতে পারেন:
#!/bin/bash
downTime=0
lastAccessTime=$(date +"%s")
while [ true ]; do
if ! ping -c1 google.com >& /dev/null; then
downTime=$(( $(date +"%s") - $lastAccessTime ))
else
downTime=0
lastAccessTime=$(date +"%s")
fi
sleep 15
if [ $downTime -ge 300 ]; then
echo "alert"
fi
done
আমরা "সংযুক্ত" উদাহরণ
ডিবাগিং চালু হওয়ার সাথে সাথে আপনি দেখতে পাবেন যে স্ক্রিপ্টটি কী করছে।
set -x
"সংযোগ শেষ" অবস্থাটি প্রদর্শনের জন্য একটি বৈধ হোস্টনামের সাথে দৌড়ানো।
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'
উপরেরটি কয়েকটি পরিবর্তনশীল সূচনা করে এবং শেষ বার লুপের মধ্য দিয়ে গিয়েছিল তা নির্ধারণ করে $lastAccessTime
। আমরা এখন গুগলকে পিং করার চেষ্টা করি।
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
আমরা এখন যে কোনও নিচের সময় গণনা করি $downTime
, যদি পিং ব্যর্থ হয়, অন্যথায়, আমরা $downTime
শূন্যে পুনরায় সেট হয়ে আবার গণনা করি $lastAccessTime
।
+ sleep 15
এখন আমরা 15 সেকেন্ড অপেক্ষা করি।
+ '[' 0 -ge 300 ']'
এখন আমরা> 5 মিনিট (300 সেকেন্ড) নেমে এসেছি কিনা তা পরীক্ষা করে দেখি। তারপরে আমরা পুনরায় while
লুপ দিয়ে যাচ্ছি ।
+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....
যতক্ষণ না আমরা আপ আছি, ping
প্রতি 15 সেকেন্ডে আমরা কমান্ডটি যাচাই করা ছাড়া অন্য কিছুই হবে না ।
আমরা "সংযুক্ত" উদাহরণ're
এখন "সংযোগ বন্ধ রয়েছে" রাষ্ট্রটি অনুকরণ করার জন্য, আমরা যে হোস্টনামটি পিং করছি তা সরিয়ে নেব এবং একটি নকল ব্যবহার করব google1234567890.com
,। ডিবাগিং সক্ষম করে আমাদের স্ক্রিপ্টের একটি রান পুনরাবৃত্তি এখন আমরা দেখি কিছু আসল ডাউন সময় গণনা করা হয়।
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402277506
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=0
+ sleep 15
+ '[' 0 -ge 300 ']'
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=15
+ sleep 15
...
$downTime
এখন পর্যন্ত 15 সেকেন্ডের সমান এর উপরে লক্ষ্য করুন । আমরা যদি আরও কিছুক্ষণ অপেক্ষা করি তবে আমরা এটি দেখতে পাব:
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15
আমরা ডাউন সেকেন্ডে 300 সেকেন্ড উপার্জন করেছি। সুতরাং এখন যখন আমরা পরীক্ষা করি, আমরা বার্তাটি প্রিন্ট করি alert
,।
+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15
সংযোগটি পুনরুদ্ধার করা এবং এটি ping
আবার সফল হওয়া অবধি এই রাজ্যটি অব্যাহত থাকবে ।
তাহলে কি একটি শব্দ?
এটা সহজ. এটি করতে আপনি বিভিন্ন সরঞ্জাম ব্যবহার করতে পারেন। আমি ভালো কিছু ব্যবহার করেন sox
অথবা mplayer
যেমন একটি হিসাবে একটি অডিও ফাইল প্লে করতে .mp3
বা .wav
যখন সংযোগ বিচ্ছিন্ন হয়েছে, একটি যথাযথ শব্দ আপনি প্রতি 15 সেকেন্ড শুনতে চাই সঙ্গে ফাইল।
mplayer someaudio.wav
alert
সংযোগটি বন্ধ রয়েছে বলে অডিও প্রতিক্রিয়া পেতে কেবল এই রেখার সাথে উপরে বার্তাটি প্রতিস্থাপন করুন ।
পিংয়ের সাথে সমস্যাগুলির সময় নির্ধারণ করা
আপনি যদি ping
উপরের পদ্ধতিতে ব্যবহার করেন তবে সম্ভবত ping
সংযোগ বন্ধ হয়ে যাওয়ার পরে এটি ব্যর্থ হওয়ার জন্য আক্ষরিক 10-10 সেকেন্ড সময় লাগে এমন একটি ধীরে ধীরে পিছনে পড়তে হবে। এই উত্তর ও উত্তর প্রশ্নোত্তর শিরোনামে আমার উত্তর দেখুন: কোনও আদেশের আউটপুট পুনর্নির্দেশ কিভাবে করবেন? fing
পরিবর্তে কমান্ড লাইন সরঞ্জাম ব্যবহার করে উদাহরণস্বরূপ । এই সরঞ্জামটি প্রথাগতের তুলনায় আরও দ্রুত ব্যর্থ হবে ping
।