ক্রোন জবস এবং এলোমেলো সময়, নির্দিষ্ট সময়ের মধ্যে


102

আমার পুরো র্যান্ডম সময়ে দিনে 20 বার পিএইচপি স্ক্রিপ্ট চালনার দক্ষতা প্রয়োজন need আমি এটিও চাই যে সকাল 9 টা থেকে 11 টা পর্যন্ত এটি চলবে।

আমি লিনাক্সে ক্রোন জব তৈরির সাথে পরিচিত।


4
প্রশ্ন খুব ভাল উত্থাপিত হয় না। শেষ পর্যন্ত আপনি সকাল 9 টা থেকে 11 টা পর্যন্ত সময় অক্ষতে 20 পয়েন্ট বিতরণ করতে চান। তবে কি ন্যূনতম সময়ের পার্থক্যের প্রতিবন্ধকতা রয়েছে? সকাল 9 টা থেকে সাড়ে দশটার মধ্যে কিছু করা কি গ্রহণযোগ্য? এটি গ্রহণযোগ্যভাবে করার একমাত্র উপায় ক্লাউসের ধারণাকে মনে হয়েছে: আপনার 20 বার নির্বাচন করুন 09:00 এ, যা আপনাকে যে কোনও প্রতিবন্ধকতাগুলি পূরণ করতে দেয় এবং তারপরে "এট" দিয়ে জিনিসগুলি নির্ধারণ করে।
ডেভিড টনহোফার

উত্তর:


38

আপনি যদি যা সন্ধান করছেন তা যদি আমি বুঝতে পারি তবে আপনাকে কিছুটা অগোছালো কিছু করতে হবে, যেমন একটি ক্রোন জব রয়েছে যা ব্যাশ স্ক্রিপ্ট চালায় যা রান সময়কে এলোমেলো করে তোলে ... এরকম কিছু:

ক্রোনটব:

0 9 * * * /path/to/bashscript

এবং / পাথ / টু / ব্যাশস্ক্রিপ্ট:

#!/bin/bash

maxdelay=$((14*60))  # 14 hours from 9am to 11pm, converted to minutes
for ((i=1; i<=20; i++)); do
    delay=$(($RANDOM%maxdelay)) # pick an independent random delay for each of the 20 runs
    (sleep $((delay*60)); /path/to/phpscript.php) & # background a subshell to wait, then run the php script
done

কয়েকটি নোট: এগুলি এটিকে সামান্য অপ্রয়োজনীয় সম্পদের কাছে নিয়ে যায়, সকাল 9 টায় 20 টি পটভূমি প্রক্রিয়া বন্ধ হয়ে যায়, যার মধ্যে প্রতিটি এলোমেলো মিনিটের জন্য অপেক্ষা করে (14 ঘন্টা পর্যন্ত, অর্থাৎ রাত 11 টা), তারপরে পিএইচপি স্ক্রিপ্ট আরম্ভ করে এবং প্রস্থান। এছাড়াও, যেহেতু এটি এলোমেলো সংখ্যক মিনিট (সেকেন্ড নয়) ব্যবহার করে, শুরুর সময়গুলি তার মতো এলোমেলো নয়। তবে ND র্যান্ডমটি কেবল 32,767 এ চলে যায়, এবং সকাল 9 টা থেকে 11 টা এর মধ্যে 50,400 সেকেন্ড থাকে, সেকেন্ডগুলিকে এলোমেলো করাও কিছুটা জটিল হবে। শেষ অবধি, যেহেতু শুরুর সময়গুলি একে অপরের সাথে এলোমেলো এবং স্বতন্ত্র, সুতরাং এটি সম্ভব (তবে খুব সম্ভবত নয়) যে স্ক্রিপ্টের দুটি বা ততোধিক ঘটনা একইসাথে শুরু হবে।


4
ডলারের চিহ্নটি ফেলে রেখে ডাবল প্যারেন্সকে বাম দিকে (যেমন ((maxdelay = 14 * 60))বা ((delay = $RANDOM % maxdelay))) সরানোর মাধ্যমে আপনি পাটিগণিত অ্যাসাইনমেন্টগুলি আরও পঠনযোগ্য করতে পারেন । sleepযুক্তি এখনও পথ যদি আপনি এটি আছে (যদিও আপনি, স্পেস যোগ করতে পারিনি ইচ্ছা হলে) হতে হবে।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

4
এটি আমার জন্যও কাজ করেছিল। আমার কাস্টম বাশ স্ক্রিপ্টটি নীচের মত দেখাচ্ছে sleep $[ ( $RANDOM % 60 ) + 1 ]s && some_script.sh
শ্যাম হাবারকদা

আমি কি কিছু মিস করছি বা সর্বোচ্চ বিলম্বকে ম্যাক্সডেলে = $ ((14 *
60/20

@ জেনিশ সখিয়া 20 রানের প্রতিটিটির জন্য এলোমেলো বিলম্ব পরম (ভাল, সকাল 9 টা থেকে শুরু), অন্য কোনও রানের তুলনায় নয়। এটি হ'ল, যদি কোনও এলোমেলো বিলম্ব 13 ঘন্টা হিসাবে আসে তবে এর অর্থ এটি রাত 10 টায় (সকাল 9 টার পরে 13 ঘন্টা) চলবে, অন্য কোনও রানের 13 ঘন্টা পরে নয়।
গর্ডন ডেভিসন

141

হ্যাঁ, হ্যাঁ, প্রশ্নটি এক বছরের পুরনো, তবে সম্ভবত আমি দরকারী কিছু যুক্ত করতে পারি:

প্রতিদিন সকাল 9 টা থেকে 11 টা পর্যন্ত 20 বার এলোমেলোভাবে অফসেটে কিছু ক্রোন করবেন কীভাবে? ক্রোনটির মধ্যে এটি বেশ জটিল, কারণ আপনি মৃত্যুদন্ড কার্যকর করার সময় দ্বারা 14 ঘন্টা ভাগ করছেন। আমি অন্যান্য উত্তরগুলি খুব পছন্দ করি না কারণ সেগুলি আপনার পিএইচপি স্ক্রিপ্টের জন্য ব্যাশ র‍্যাপার স্ক্রিপ্ট লেখার প্রয়োজন।

তবে, আপনি যদি আমাকে সকাল সাড়ে ৮ টা থেকে রাত ১১:০৯ এর মধ্যে ১৩ বার সময় ও ফ্রিকোয়েন্সি বিধিনিষেধকে স্বাচ্ছন্দ্যের অনুমতি দেন তবে এটি কৌশলটি করতে পারে এবং সমস্তই আপনার ক্রান্তাবের সীমানায় থাকবে:

30 8-21/* * * * sleep ${RANDOM:0:2}m ; /path/to/script.php

{ND র্যান্ডম: 3: 2 b বাশের $ র্যান্ডম ব্যবহার করে যা অন্যান্য লোকেরা উপরে উল্লিখিত রয়েছে, তবে ব্যাশের অ্যারে স্লাইসিং যুক্ত করে। যেহেতু ব্যাশ ভেরিয়েবলগুলি টাইপবিহীন, সিউডো-এলোমেলো স্বাক্ষরযুক্ত 16-বিট সংখ্যাটি তার 5 দশমিক অঙ্কের প্রথম 2 এ ছাঁটাই হয়ে যায়, আপনাকে 10 থেকে 99 মিনিটের মধ্যে আপনার ক্রোনজবকে বিলম্ব করার জন্য একটি সংক্ষিপ্ত ওয়ান-লাইনার দেয় (যদিও বিতরণটি পক্ষপাতদুষ্ট থাকে 10 থেকে 32)।

নিম্নলিখিতগুলি আপনার জন্যও কাজ করতে পারে তবে আমি দেখতে পেয়েছি এটি কোনও কারণে "কম এলোমেলো" হতে পারে (সম্ভবত বেনফোর্ডের আইন সিউডো-র্যান্ডম সংখ্যার সংশোধন করে ট্রিগার করা হয়েছে Hey আরে, আমি জানি না, আমি গণিতকে ঘৃণা করেছি ... দোষারোপ করুন বাশ অন!):

30 8-21/* * * * sleep $[RANDOM\%90]m ; /path/to/script.php

আপনাকে উপরের '\%' হিসাবে মডুলাসটি রেন্ডার করতে হবে কারণ ক্রোন (ভাল, কমপক্ষে লিনাক্স 'ভিক্সি-ক্রোন') লাইনটি যখন অপরিবর্তিত '%' এর মুখোমুখি হয় তখন বন্ধ করে দেয়।

সম্ভবত আপনি আরও 7 ঘন্টা ব্যাপ্তির সাথে অন্য একটি লাইন যুক্ত করে সেখানে বাকী 7 স্ক্রিপ্টের মৃত্যুদণ্ড পেতে পারেন। অথবা সকাল 3 টা থেকে 11 টা পর্যন্ত চলতে আপনার সীমাবদ্ধতা শিথিল করুন।


4
আমি দেরী উত্তর পছন্দ। তবে আপনি যদি 10 থেকে 99 এর পরিসীমাতে সমানভাবে বিতরণ করা এলোমেলো পূর্ণসংখ্যা উত্পন্ন করার চেষ্টা করছেন, এবং র‌্যানডমের আউটপুট 0 থেকে 32,767 হয় তবে আপনি কেন করবেন না $[(RANDOM/368)+10]?
jsdalton

4
@ জেএসডালটন: মডুলো অপারেটরটি কি আরও ভাল হতে পারে না? $((RANDOM % 90 + 10))পরীক্ষা:for i in {0..9999}; do echo $((RANDOM % 90 + 10)); done | sort | uniq -c
জিওন

4
তাই এটি ভালো হতে পারে bashism এড়াতে অনেক সিস্টেমে ক্রন ডিফল্টরূপে ব্যাশ ব্যবহার করে না $RANDOM: sleep $(( $(od -N1 -tuC -An /dev/urandom) \% 90 ))m
পাবউক

9
আপনার crontabব্যবহারের bashআগে নিশ্চিত হয়ে নিন যে এটি ব্যবহার করছে $RANDOMযদি আপনার কাছে vixie-cron(উবুন্টুতে আমার মামলা বলে মনে হয়), তবে আপনি SHELL=/bin/bashশীর্ষে যুক্ত করতে পারেন । অন্যান্য ক্রোন সংস্করণগুলির জন্য এখানে আরও বিকল্প রয়েছে: superuser.com/a/264541/260350
দাআউবিআলপি

4
আমি যখন উপরে প্রথম পরামর্শটি ব্যবহার করি তখন আমি crontab: errors in crontab file, can't install. Do you want to retry the same edit?দয়া করে সহায়তা
পাই

73

সুতরাং আমি 1am থেকে 330am এর মধ্যে একটি কমান্ড চালাতে নিম্নলিখিতটি ব্যবহার করছি

0 1 * * * perl -le 'sleep rand 9000' && *command goes here*

এটি আমার জন্য আমার এলোমেলো প্রয়োজনের যত্ন নিচ্ছে। এটি 9000 সেকেন্ড == 150 মিনিট == 2.5 ঘন্টা


8
:: মাইন্ডব্লাউন :: পার্ল সামান্য বিট ব্যবহার করার জন্য অন্য একটি অস্পষ্ট স্থান।
মার্ক কার্পেন্টার জুনিয়র

এটি অবশ্যই সবচেয়ে পরিষ্কার উত্তর
এনারিকো ডিটোমা

যদিও আপনি প্রচুর প্রক্রিয়া তৈরি করছেন এটি এক ধরণের অদক্ষ।
kahveciderin

21

ক্রোন একটি RANDOM_DELAYপরিবর্তনশীল অফার করে । দেখুন crontab(5)বিস্তারিত জানার জন্য।

RANDOM_DELAY ভেরিয়েবল ভেরিয়েবল দ্বারা সুনির্দিষ্ট উপরের সীমাটি এলোমেলো পরিমাণ মিনিট জব স্টার্টআপগুলিতে বিলম্বের অনুমতি দেয়।

এটি সাধারণত anacronচাকরিতে দেখা যায় তবে এটি এ ক্ষেত্রেও কার্যকর হতে পারেcrontab

আপনার যদি এমন কিছু কাজ রয়েছে যা জরিমানা (মিনিট) দারুচিত্রে চালিত হয় এবং অন্যান্য যেগুলি মোটা হয় You


আমি RANDOM_DELAY পরিবর্তনশীলটি ব্যবহার করতে চাই তবে উবুন্টু 14.04.4 এলটিএস-তে ক্রন্টব (5) এর ম্যানপেজে কোনও ইঙ্গিত পাই না।
এক্সোকম

এটা দুর্ভাগ্যজনক. আমি অবাক হই যে এটি যদি সেখানে সমর্থিত না হয়। আমি এটি সেন্টোস 7 এবং আর্চ লিনাক্সের সেই ম্যানপেজে নথিভুক্ত দেখছি।
মাইকা এলিয়ট

9
এটি সঠিক উত্তর মত বলে মনে হচ্ছে তবে আপনি একটি উদাহরণ স্থাপন করতে পারেন?
chovy

14
দয়া করে নোট করুন যে RANDOM_DELAYএকবার ইনস্টল হয়ে গেছে এবং ডেমনের পুরো রানটাইমের জন্য স্থির থাকে।
ম্যাকিয়েজ সোয়াই

4
RANDOM_DELAYপতাকার বৈশিষ্ট্য cronie-crond যখন উবুন্টু চালাতে হবে বলে মনে হয় vixie-cronযা এই পতাকা অভাব আছে।
ক্রেভিটজ

7

আমার প্রথম চিন্তাটি হবে একটি ক্রোন জব তৈরি করা যা চাকরিতে এলোমেলোভাবে নির্ধারিত 20 টি। atউপযোগ (http://unixhelp.ed.ac.uk/CGI/man-cgi?at) নিদিষ্ট সময়ে কমান্ড নির্বাহ জন্য ব্যবহৃত হয়।



6

আমি ব্যবহার করে শেষ করেছি sleep $(( 1$(date +%N) % 60 )) ; dostuffs(ব্যাশ ও শের সাথে সামঞ্জস্যপূর্ণ)

1 উপসর্গটি নন বেস 8 টি তারিখের +% এন (যেমন 00551454) এর ব্যাখ্যা জোর করে

একটি ক্রন্টব ফাইলটিতে \% ব্যবহার করে% পালাতে ভুলবেন না

* * * * *  nobody  sleep $(( 1$(date +\%N) \% 60 )) ; dostuffs 

4
যদি কেউ আমার মতো আশ্চর্য হয়:% N বর্তমান ন্যানো সরবরাহ করে তবে কিছু ম্যান পৃষ্ঠাতে এর জন্য তথ্যের অভাব রয়েছে। এটি মানুষের জন্য খুব চতুর সমাধান যা কমান্ড অনুযায়ী সহজে "কিছু র্যান্ডমনেস" প্রয়োজন।
থারস্টেন শেনিং

ইতিমধ্যে অন্য কোথাও আচ্ছাদিত dateক্যাভিটগুলি বাদ দিয়ে, এটি কেবল তখনই কাজ করবে যদি আপনার জিএনইউ থাকে (যা আপনি সম্ভবত বেশিরভাগ লিনাক্সে করেন তবে ব্যাসিবক্স, স্ট্যান্ডার্ড ম্যাকোএস বা বিএসডি-থেকে প্রাপ্ত অন্যান্য প্ল্যাটফর্মগুলিতে নয়)।
ট্রিপলি

4

আল-এক্স এর সমাধান আমার পক্ষে কার্যকর হয় না যেহেতু ক্রোনটব কমান্ডগুলি ব্যাশে কার্যকর করা হয় না তবে আমার ধারণা sh কাজ কি:

30 8 * * * bash -c "sleep $[RANDOM\%90]m" ; /path/to/script.py

আমি সবকিছু চেষ্টা করেছিলাম এবং এটি এখনও আমার পক্ষে কার্যকর হয়নি। আপনি পোস্ট কেন ব্যাখ্যা করেছেন, ধন্যবাদ!
মার্লার

$[ ... ]waaaay ফিরে থেকে অবচয় সিনট্যাক্স হয়; এই সহস্রাব্দের থেকে যে কোনও কিছুর জন্য আপনি পছন্দ করবেন $((RANDOM\%90))mকোনটি পসিএক্স-সামঞ্জস্যপূর্ণ বাক্য গঠন (তবে অবশ্যই RANDOMএখনও কেবল বাশ))
ট্রিপলি

1

at -f [file] [timespec]

বা

echo [command] | at [timespec]

বা

at [timespec]... এবং ইন্টারেক্টিভ স্পেসিফিকেশন যেমন scriptরেকর্ডিং।

কমান্ড

স্ট্যান্ডিনে বা নির্দিষ্ট ফাইলটিতে টেক্সট সরবরাহ করে -f [file]

টাইমস্পেক

[timespec] ব্যাকরণ এখানে । এটি এমন কিছু হতে পারে:

  • 24-ঘন্টা সময় 4 সংখ্যার int- এ যেমন যেমন 0100, 2359,1620
  • now + 10 minutes
  • 2071-05-31 - 5 hours 12 minutes UTC

আপনি যদি স্পষ্টভাবে টাইমজোনটি নির্দিষ্ট করে থাকেন তবে টাইমস্পেকের কিছু সংস্করণ কেবলমাত্র timeচ্ছিক UTCসময় অঞ্চল যুক্তির জন্য মঞ্জুরি দিতে পারে।

উদাহরণ

cat script.sh | at now + $(($RANDOM % 10)) hours $(($RANDOM % 60)) minutes

at -f script.sh now + $(($RANDOM % 10)) hours $(($RANDOM % 60)) minutes

চেষ্টা কর...

আপনি প্রাক-মুলতুবি করে echoএবং |(পাইপ) থেকে বেরিয়ে বাশ পার্সিং পরীক্ষা করতে পারেন ।

echo cat script.sh \| at now + $(($RANDOM % 10)) hours $(($RANDOM % 60)) minutes

echo at -f script.sh now + $(($RANDOM % 10)) hours $(($RANDOM % 60)) minutes

নির্ধারিত কাজ, ব্যবহার দেখার জন্য atqসঙ্গে ও চাকরির বিষয়বস্তু (পরিবেশ Vars, সেটআপ, এবং কমান্ড / স্ক্রিপ্ট) at -c [jobid]

বিঃদ্রঃ

সিস্টেমটি ক্রনের অংশ, এবং ইন্টারেক্টিভ প্রম্পটটি আসলে আপনার শেলের পুরো বর্তমান অবস্থানটি ক্যাপচার করে, যাতে আপনি নিখুঁত পাথ নির্দিষ্ট না করেই কমান্ড চালাতে পারেন।


1

আমি বুঝতে পারি এটি একটি পুরানো থ্রেড, তবে আমি একটি এলোমেলো-মান সম্পর্কিত জিনিস যুক্ত করতে চাই যা আমি প্রচুর ব্যবহার করি। একটি স্থির এবং সীমাবদ্ধ পরিসরের সাথে $ RANDOM ভেরিয়েবলটি ব্যবহার না করে আমি প্রায়শই শেলের সাথে স্বেচ্ছাসেবী-রেঞ্জের র্যান্ডম মানগুলি তৈরি করি with

dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -N4 -t u4 -A none

সুতরাং আপনি করতে পারেন, উদাহরণস্বরূপ,

FULLRANDOM=$(dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -N4 -t u4 -A none)

এবং এই থ্রেডে আলোচিত কিছু বিধিনিষেধকে কাটিয়ে উঠুন।


4
তাই আপনাকে স্বাগতম। ঠিক আছে, পুরানো থ্রেডটি বা না, এটি আমাকে প্রেরণ করেছে ~$info ddএবং আমি বুঝতে পারি যে বাম দিকে কী চলছে |, তবে ডান দিকটি তৈরি করতে পারব না। সুতরাং, আমার এবং overcoming some restrictionsএলোমেলো মান উত্পন্নকরণে আগ্রহী অন্যদের জন্য , কেন আরএইচএসকে ব্যাখ্যা করতে কিছুটা সময় নিবেন না এবং আপনার পদ্ধতির ব্যবহারের জন্য আরও শক্তিশালী পিচ তৈরি করুন। উভয়ের ব্যাখ্যার গভীরতা আপনার প্রস্তাবিত প্রক্রিয়াটিতে লোককে স্বাচ্ছন্দ্যময় করে তোলে এবং এর সুবিধাগুলি ধন্যবাদ।
ক্রিস

4
আহ, ঠিক আছে. od ওরফে "অষ্টাল ডাম্প" একটি ফাইল বা স্টিডিন নেয় এবং বাইনারি ডেটা মানব-পঠনযোগ্য আকারে ফেলে দেয়। আমরা আমাদের নম্বরটি স্বাক্ষরবিহীন দশমিক (-t u4) হিসাবে দেখানো চাই এবং ঠিকানা সূচি (-এর কোনও নয়) চাই না। -N4 অপ্রয়োজনীয় যেহেতু আমরা কেবল 4 বাইট নিই, তবে কোনও ক্ষতি করে না। আমি আশা করি এটি এটি ব্যাখ্যা করেছে ...
এমএলপি

0

যারা এখানে পথ গুগল করেছেন:

আপনি যদি অ্যানক্রোন (উবুন্টু ডেস্কটপ এবং ল্যাপটপ) ব্যবহার করেন তবে আপনি সম্পাদনা করতে পারেন

/etc/anacrontab

এবং যোগ কর

RANDOM_DELAY=XX 

যেখানে বেস বেস আপনি বিলম্ব করতে চান মিনিট পরিমাণ হল।

আনাক্রন ক্রোন এর মতো তবে এটি আপনার কম্পিউটারটি 24x7 (আমাদের ল্যাপটপের মতো) এ থাকবে বলে আশা করে না এবং সিস্টেমটি বন্ধ থাকায় এটি যে স্ক্রিপ্টগুলি হারিয়েছিল তা চালাবে।


0

কমান্ড কার্যকর করার আগে এলোমেলো সময় ব্যবহার করার জন্য আপনি এই উদাহরণ দিয়ে চেষ্টা করতে পারেন:

#!/bin/bash
# start time
date +"%H:%M:%S"

# sleep for 5 seconds
sleep $(shuf -i 1-25 -n 1)
# end time
date +"%H:%M:%S"

0

এমন একটি স্ক্রিপ্ট তৈরি সম্পর্কে কী যা ক্রন্টবকে প্রতিদিন নতুন করে লেখেন?

  1. বর্তমান crons পড়ুন (এ)
  2. এলোমেলো বার বাছুন (খ)
  3. পূর্বের ক্রোনগুলি (এ) পুনরায় লিখুন, নতুন এলোমেলো ক্রোন যুক্ত করুন (বি)
  4. এই স্ক্রিপ্টটি প্রথম স্থানে চালানোর জন্য ক্রোন যুক্ত করার বিষয়টি নিশ্চিত করুন।

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

4
আমি কেবল এই উত্তরটি পর্যালোচনা করেছি এবং আপনি যে অংশটি শেষে একটি প্রশ্ন জিজ্ঞাসা করছেন সেটিকে মিস করেছি (আমার অংশে opালু কাজ)। উত্তরে প্রশ্ন জিজ্ঞাসা করবেন না। আপনার নিজের প্রশ্নের জন্য আপনার নিজের প্রশ্ন পোস্ট করুন। আমি আপনার অর্ধ-প্রশ্নকে এমন কিছু তৈরি করেছি যা উত্তরের জন্য যেতে পারে।
টেড লিংগো

4
বুঝেছি! ধন্যবাদ. আমি পরের বার আরও সতর্ক থাকব, কোনও খারাপ উদ্দেশ্য বোঝানো হয়নি।
মেলোফেলো

4
আমি নিশ্চিত যে আপনার কোনও খারাপ উদ্দেশ্য ছিল না এবং আপনার অত্যধিক সাবধান হওয়ার প্রয়োজন নেই। আপনি একটি সম্ভাব্য সমাধানের রূপরেখা দিয়েছেন - এবং শেষে কিছুটা হোঁচট খেয়েছেন। কোন চিন্তা করো না!
টেড লিংগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.