আমার পুরো র্যান্ডম সময়ে দিনে 20 বার পিএইচপি স্ক্রিপ্ট চালনার দক্ষতা প্রয়োজন need আমি এটিও চাই যে সকাল 9 টা থেকে 11 টা পর্যন্ত এটি চলবে।
আমি লিনাক্সে ক্রোন জব তৈরির সাথে পরিচিত।
আমার পুরো র্যান্ডম সময়ে দিনে 20 বার পিএইচপি স্ক্রিপ্ট চালনার দক্ষতা প্রয়োজন need আমি এটিও চাই যে সকাল 9 টা থেকে 11 টা পর্যন্ত এটি চলবে।
আমি লিনাক্সে ক্রোন জব তৈরির সাথে পরিচিত।
উত্তর:
আপনি যদি যা সন্ধান করছেন তা যদি আমি বুঝতে পারি তবে আপনাকে কিছুটা অগোছালো কিছু করতে হবে, যেমন একটি ক্রোন জব রয়েছে যা ব্যাশ স্ক্রিপ্ট চালায় যা রান সময়কে এলোমেলো করে তোলে ... এরকম কিছু:
ক্রোনটব:
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 সেকেন্ড থাকে, সেকেন্ডগুলিকে এলোমেলো করাও কিছুটা জটিল হবে। শেষ অবধি, যেহেতু শুরুর সময়গুলি একে অপরের সাথে এলোমেলো এবং স্বতন্ত্র, সুতরাং এটি সম্ভব (তবে খুব সম্ভবত নয়) যে স্ক্রিপ্টের দুটি বা ততোধিক ঘটনা একইসাথে শুরু হবে।
((maxdelay = 14 * 60))
বা ((delay = $RANDOM % maxdelay))
) সরানোর মাধ্যমে আপনি পাটিগণিত অ্যাসাইনমেন্টগুলি আরও পঠনযোগ্য করতে পারেন । sleep
যুক্তি এখনও পথ যদি আপনি এটি আছে (যদিও আপনি, স্পেস যোগ করতে পারিনি ইচ্ছা হলে) হতে হবে।
sleep $[ ( $RANDOM % 60 ) + 1 ]s && some_script.sh
হ্যাঁ, হ্যাঁ, প্রশ্নটি এক বছরের পুরনো, তবে সম্ভবত আমি দরকারী কিছু যুক্ত করতে পারি:
প্রতিদিন সকাল 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 টা পর্যন্ত চলতে আপনার সীমাবদ্ধতা শিথিল করুন।
$[(RANDOM/368)+10]
?
$((RANDOM % 90 + 10))
পরীক্ষা:for i in {0..9999}; do echo $((RANDOM % 90 + 10)); done | sort | uniq -c
$RANDOM
: sleep $(( $(od -N1 -tuC -An /dev/urandom) \% 90 ))m
।
crontab
ব্যবহারের bash
আগে নিশ্চিত হয়ে নিন যে এটি ব্যবহার করছে $RANDOM
। যদি আপনার কাছে vixie-cron
(উবুন্টুতে আমার মামলা বলে মনে হয়), তবে আপনি SHELL=/bin/bash
শীর্ষে যুক্ত করতে পারেন । অন্যান্য ক্রোন সংস্করণগুলির জন্য এখানে আরও বিকল্প রয়েছে: superuser.com/a/264541/260350
crontab: errors in crontab file, can't install. Do you want to retry the same edit?
দয়া করে সহায়তা
সুতরাং আমি 1am থেকে 330am এর মধ্যে একটি কমান্ড চালাতে নিম্নলিখিতটি ব্যবহার করছি
0 1 * * * perl -le 'sleep rand 9000' && *command goes here*
এটি আমার জন্য আমার এলোমেলো প্রয়োজনের যত্ন নিচ্ছে। এটি 9000 সেকেন্ড == 150 মিনিট == 2.5 ঘন্টা
ক্রোন একটি RANDOM_DELAY
পরিবর্তনশীল অফার করে । দেখুন crontab(5)
বিস্তারিত জানার জন্য।
RANDOM_DELAY ভেরিয়েবল ভেরিয়েবল দ্বারা সুনির্দিষ্ট উপরের সীমাটি এলোমেলো পরিমাণ মিনিট জব স্টার্টআপগুলিতে বিলম্বের অনুমতি দেয়।
এটি সাধারণত anacron
চাকরিতে দেখা যায় তবে এটি এ ক্ষেত্রেও কার্যকর হতে পারেcrontab
।
আপনার যদি এমন কিছু কাজ রয়েছে যা জরিমানা (মিনিট) দারুচিত্রে চালিত হয় এবং অন্যান্য যেগুলি মোটা হয় You
RANDOM_DELAY
একবার ইনস্টল হয়ে গেছে এবং ডেমনের পুরো রানটাইমের জন্য স্থির থাকে।
RANDOM_DELAY
পতাকার বৈশিষ্ট্য cronie-crond যখন উবুন্টু চালাতে হবে বলে মনে হয় vixie-cron
যা এই পতাকা অভাব আছে।
আমি ব্যবহার করে শেষ করেছি sleep $(( 1$(date +%N) % 60 )) ; dostuffs
(ব্যাশ ও শের সাথে সামঞ্জস্যপূর্ণ)
1 উপসর্গটি নন বেস 8 টি তারিখের +% এন (যেমন 00551454) এর ব্যাখ্যা জোর করে
একটি ক্রন্টব ফাইলটিতে \% ব্যবহার করে% পালাতে ভুলবেন না
* * * * * nobody sleep $(( 1$(date +\%N) \% 60 )) ; dostuffs
date
ক্যাভিটগুলি বাদ দিয়ে, এটি কেবল তখনই কাজ করবে যদি আপনার জিএনইউ থাকে (যা আপনি সম্ভবত বেশিরভাগ লিনাক্সে করেন তবে ব্যাসিবক্স, স্ট্যান্ডার্ড ম্যাকোএস বা বিএসডি-থেকে প্রাপ্ত অন্যান্য প্ল্যাটফর্মগুলিতে নয়)।
আল-এক্স এর সমাধান আমার পক্ষে কার্যকর হয় না যেহেতু ক্রোনটব কমান্ডগুলি ব্যাশে কার্যকর করা হয় না তবে আমার ধারণা sh কাজ কি:
30 8 * * * bash -c "sleep $[RANDOM\%90]m" ; /path/to/script.py
$[ ... ]
waaaay ফিরে থেকে অবচয় সিনট্যাক্স হয়; এই সহস্রাব্দের থেকে যে কোনও কিছুর জন্য আপনি পছন্দ করবেন $((RANDOM\%90))m
কোনটি পসিএক্স-সামঞ্জস্যপূর্ণ বাক্য গঠন (তবে অবশ্যই RANDOM
এখনও কেবল বাশ))
at -f [file] [timespec]
বা
echo [command] | at [timespec]
বা
at [timespec]
... এবং ইন্টারেক্টিভ স্পেসিফিকেশন যেমন script
রেকর্ডিং।
স্ট্যান্ডিনে বা নির্দিষ্ট ফাইলটিতে টেক্সট সরবরাহ করে -f [file]
।
[timespec]
ব্যাকরণ এখানে । এটি এমন কিছু হতে পারে:
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]
।
সিস্টেমটি ক্রনের অংশ, এবং ইন্টারেক্টিভ প্রম্পটটি আসলে আপনার শেলের পুরো বর্তমান অবস্থানটি ক্যাপচার করে, যাতে আপনি নিখুঁত পাথ নির্দিষ্ট না করেই কমান্ড চালাতে পারেন।
আমি বুঝতে পারি এটি একটি পুরানো থ্রেড, তবে আমি একটি এলোমেলো-মান সম্পর্কিত জিনিস যুক্ত করতে চাই যা আমি প্রচুর ব্যবহার করি। একটি স্থির এবং সীমাবদ্ধ পরিসরের সাথে $ 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)
এবং এই থ্রেডে আলোচিত কিছু বিধিনিষেধকে কাটিয়ে উঠুন।
~$info dd
এবং আমি বুঝতে পারি যে বাম দিকে কী চলছে |
, তবে ডান দিকটি তৈরি করতে পারব না। সুতরাং, আমার এবং overcoming some restrictions
এলোমেলো মান উত্পন্নকরণে আগ্রহী অন্যদের জন্য , কেন আরএইচএসকে ব্যাখ্যা করতে কিছুটা সময় নিবেন না এবং আপনার পদ্ধতির ব্যবহারের জন্য আরও শক্তিশালী পিচ তৈরি করুন। উভয়ের ব্যাখ্যার গভীরতা আপনার প্রস্তাবিত প্রক্রিয়াটিতে লোককে স্বাচ্ছন্দ্যময় করে তোলে এবং এর সুবিধাগুলি ধন্যবাদ।
যারা এখানে পথ গুগল করেছেন:
আপনি যদি অ্যানক্রোন (উবুন্টু ডেস্কটপ এবং ল্যাপটপ) ব্যবহার করেন তবে আপনি সম্পাদনা করতে পারেন
/etc/anacrontab
এবং যোগ কর
RANDOM_DELAY=XX
যেখানে বেস বেস আপনি বিলম্ব করতে চান মিনিট পরিমাণ হল।
আনাক্রন ক্রোন এর মতো তবে এটি আপনার কম্পিউটারটি 24x7 (আমাদের ল্যাপটপের মতো) এ থাকবে বলে আশা করে না এবং সিস্টেমটি বন্ধ থাকায় এটি যে স্ক্রিপ্টগুলি হারিয়েছিল তা চালাবে।
কমান্ড কার্যকর করার আগে এলোমেলো সময় ব্যবহার করার জন্য আপনি এই উদাহরণ দিয়ে চেষ্টা করতে পারেন:
#!/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"
এমন একটি স্ক্রিপ্ট তৈরি সম্পর্কে কী যা ক্রন্টবকে প্রতিদিন নতুন করে লেখেন?