প্রতি তিন দিন পরে কি ক্রোনজব চালানো সম্ভব ? অথবা 10 বার / মাসে হতে পারে।
প্রতি তিন দিন পরে কি ক্রোনজব চালানো সম্ভব ? অথবা 10 বার / মাসে হতে পারে।
উত্তর:
প্রতি তিন দিন পরে এটি চালান ...
0 0 */3 * *
কীভাবে?
আপনি যদি এটি চান যে 1 ম, 4 র্থ, 7 তম ইত্যাদি মাসের নির্দিষ্ট দিনগুলিতে চালিত হয় ... তবে আপনার স্ক্রিপ্টে আপনি কেবলমাত্র শর্তযুক্ত থাকতে পারেন যা মাসের বর্তমান দিনের জন্য পরীক্ষা করে।
if (((date('j') - 1) % 3))
exit();
বা, যেমন @ মারিও উল্লেখ করেছেন, আপনি মাসের দিনের ভিত্তিতে বছরের পরিবর্তে তারিখ ('কে') ব্যবহার করতে পারেন।
0 0 */3 * *
মানে ১ লা, চতুর্থ, সপ্তম, ইত্যাদি চালানো ( */3
মানে 1-31/3
অর্থ 1,4,7...31
) যাতে মাসের শেষে ব্যবধানটি আরও কম হয়ে যায়। (এটি পূর্ববর্তী মাসে ৩১ দিন হলে টানা ২ দিন চলবে)) date('j') % 3
প্যাটার্নটি প্রতিবছর পুনরায় চালু হয় এবং বছরগুলিতে ৩. দ্বারা বিভাজ্য সংখ্যক দিন থাকে না
* * */3 * * that says, every minute of every hour on every three days.
0 0 */3 * * says at 00:00 (midnight) every three days.
আমি ক্রোন বিশেষজ্ঞ নই, তবে কীভাবে:
0 */72 * * *
এটি প্রতি 72 ঘন্টা অন্তরায় ব্যতীত চলবে।
then at 2019-02-28 00:00:00 then at 2019-03-01 00:00:00
ক্রোন "স্টেটলেস" হওয়ায় এটি "ফ্রিকোয়েন্সি" নির্ভুলভাবে প্রকাশ করতে পারে না, কেবলমাত্র "নিদর্শন" যা বর্তমান সময়ের তুলনায় এটি (দৃশ্যত) ধারাবাহিকভাবে মেলে।
আপনার প্রশ্নের পুনর্বিবেচনা এটি আরও স্পষ্ট করে তুলেছে: "2 রাতের মধ্যে যখন চলেছিল তখন রাত্রে এড়িয়ে যাওয়া ছাড়াও কি প্রতিদিন রাত 1 টা 1 মিনিটে ক্রোনজব চালানো সম্ভব?" ক্রোন যখন বর্তমান সময়ের সাথে কাজের অনুরোধের সময় নিদর্শনগুলির সাথে তুলনা করছে, ক্রোন এটি জানতে পারে না যে এটি অতীতে আপনার কাজটি চালিয়েছিল কিনা।
সাধারণত আপনাকে সেই পুনরাবৃত্ত ইভেন্টটি শেষ করতে হবে এবং সম্পূর্ণ নতুন একটি পুনরায় চালু করতে হবে; এটি জটিল ক্যালেন্ডার অ্যাপ্লিকেশনগুলি পুনরাবৃত্তি করার নিদর্শনগুলিকে কীভাবে উপস্থাপন করে তার সীমাবদ্ধ অভিব্যক্তি চিত্রিত করে। এবং অবশ্যই ক্যালেন্ডারগুলির প্রচুর অবস্থা রয়েছে - প্রতিটি পৃথক ইভেন্ট মুছে ফেলা বা পুনরায় নির্ধারণ করা যেতে পারে [বেশিরভাগ ক্যালেন্ডার অ্যাপ্লিকেশনগুলিতে]।
তদতিরিক্ত, আপনি সফল হলে প্রতি তৃতীয় রাতে আপনার কাজটি করতে চান , তবে শেষ ব্যর্থ হলে অবিলম্বে আবার চেষ্টা করুন, সম্ভবত পরের রাতে (আরও 3 দিন অপেক্ষা করবেন না) বা আরও তাড়াতাড়ি, এক ঘন্টা পরে (তবে পুনরায় চেষ্টা বন্ধ করুন) সকালে আসার পরে)। স্পষ্টতই, ক্রোন সম্ভবত আপনার কাজ সফল হয়েছে কিনা তা জানতে পারে না এবং প্যাটার্নটি বিকল্পের সাথে আরও ঘন ঘন "পুনরায় চেষ্টা করুন" সময়সূচীও প্রকাশ করতে পারে না।
যেভাবেই - আপনি নিজের যা করতে চান তা করতে পারেন। একটি স্ক্রিপ্ট লিখুন, ক্রোনকে এটি রাত্রে 00:01 am চালাতে বলুন। এই স্ক্রিপ্টটি এমন কোনও কিছুর টাইমস্ট্যাম্প যাচাই করতে পারে যা "শেষ রান" রেকর্ড করে এবং যদি এটি 3 দিন আগে ** হয় তবে কাজটি সম্পাদন করুন এবং "শেষ রান" টাইমস্ট্যাম্পটি পুনরায় সেট করুন।
(* যে টাইমস্ট্যাম্পড ইনডিকেটরটি কিছুটা স্থির অবস্থার যা আপনি পরিচালনা ও পরীক্ষা করতে পারেন, তবে কোন ক্রোন তা করতে পারে না)
** আপনি যদি মানব-পঠনযোগ্য ঘড়ির সময় - বছরে দু'বার ব্যবহার করেন, তবে কিছু দিনের তাদের দিনগুলিতে ২৩ বা ২৫ ঘন্টা সময় থাকে এবং 02: 00-02: 59 একদিনে দু'বার হয় বা না হয় সব। এটি এড়াতে ইউটিসি ব্যবহার করুন।
0 0 1-30/3 * *
এটি প্রতি তিন দিন পরে প্রথম থেকে শুরু হবে। এখানে নির্ধারিত ২০ টি রান -
আমি মনে করি না যে আপনার যা প্রয়োজন তা আপনার কাছে রয়েছে:
0 0 */3 * * ## <<< WARNING!!! CAUSES UNEVEN INTERVALS AT END OF MONTH!!
দুর্ভাগ্যবশত, * / 3 ব্যবধান সেটিং করা হয় মাসের প্রতি এন দিন এবং না যে এন দিন । দেখুন: ব্যাখ্যা এখানে । মাসের শেষে এখানে পুনরাবৃত্তি সংক্রান্ত সমস্যা রয়েছে।
1st at 2019-02-01 00:00:00
then at 2019-02-04 00:00:00 << 3 days, etc. OK
then at 2019-02-07 00:00:00
...
then at 2019-02-25 00:00:00
then at 2019-01-28 00:00:00
then at 2019-03-01 00:00:00 << 1 day WRONG
then at 2019-03-04 00:00:00
...
এই নিবন্ধ অনুসারে , একটি সত্য "প্রতি এন দিন" পেতে এক্সিকিউট করা হচ্ছে কমান্ডটিতে আপনাকে কিছু মডুলো গণিত যুক্ত করতে হবে। উদাহরণ স্বরূপ:
0 0 * * * bash -c '(( $(date +\%s) / 86400 \% 3 == 0 )) && runmyjob.sh
এই উদাহরণস্বরূপ, কাজটি প্রতিদিন সকাল 12:00 টায় চেক করা হবে, তবে কেবলমাত্র 01-01-1970 মডুলো 3 দিনের পরের দিন 0 হলে কার্যকর হবে।
যদি আপনি এটি নির্দিষ্ট তারিখ থেকে প্রতি 3 দিন পরে থাকতে চান তবে নিম্নলিখিত ফর্ম্যাটটি ব্যবহার করুন:
0 0 * * * bash -c '(( $(date +\%s -d "2019-01-01") / 86400 \% 3 == 0 )) && runmyjob.sh
কেমন:
00 00 * * * every 3 days && echo test
every
স্ক্রিপ্টটি কোথায় :
#!/bin/sh
case $2 in
days)
expr `date +%j` % $1 = 0 > /dev/null
;;
weeks)
expr `date +%V` % $1 = 0 > /dev/null
;;
months)
expr `date +%m` % $1 = 0 > /dev/null
;;
esac
তাই এটি প্রতিদিন চলে।
*/3
মাসের তৃতীয়, 6th ষ্ঠ, ২ 27 তম, ৩০ তারিখে রান ব্যবহার করা , তবে এক মাস পরে 31 তম দিন থাকার পরে ভুল হয়। every
স্ক্রিপ্ট বছরের শেষ পরই ভুল।
আপনার বেসিকগুলি শিখতে হবে crontab
।
আদেশ অনুসারে ক্রোনটি সম্পাদনা করুন crontab -e
এবং তারপরে ⌃ (CTRL)+ Xতারপরে Yএবং ENTER (return)ফাইলটি সংরক্ষণ করতে অবশেষে ম্যাক টিপুন । আপনি দেখতে পাচ্ছেন যে নতুন ক্রোনগুলি ইনস্টল করা হয়েছে নাcrontab -l
একটি ক্রন্টব ফাইলের মিনি, ঘন্টা, মাসের দিন, মাস এবং সপ্তাহের দিন নির্দিষ্ট করার জন্য পাঁচটি ক্ষেত্র থাকে যার পরে সেই ব্যবধানে চালিত হবার নির্দেশ দেওয়া হয়।
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0-6) (Sunday=0)
| | | +------- month (1-12)
| | +--------- day of month (1-31)
| +----------- hour (0-23)
+------------- min (0-59)
*
উপরের মান ক্ষেত্রের অর্থ সেই কলামটির ধনুর্বন্ধনী হিসাবে সমস্ত আইনী মান।
এখানে, আমি এটি সম্পর্কে একটি বিস্তারিত পোস্ট লিখেছি: ইউনিক্সে সেটআপ ক্রোন
আপনি যদি এটি চান যে 1 ম, 4 র্থ, 7 তম ইত্যাদি মাসের নির্দিষ্ট দিনগুলিতে চালিত হয় ... তবে আপনার স্ক্রিপ্টে আপনি কেবলমাত্র শর্তযুক্ত থাকতে পারেন যা মাসের বর্তমান দিনের জন্য পরীক্ষা করে।
আমি ভেবেছিলাম এর জন্য আপনার যা যা প্রয়োজন তা ছিল * / 3 এর পরিবর্তে যা প্রতি তিন দিন অন্তর্ভুক্ত থাকে, 1/3 ব্যবহার করুন যার অর্থ প্রতি তিন দিন পর মাসের 1 তারিখ থেকে শুরু হয়। সুতরাং 7/3 এর অর্থ প্রতি তিন দিন অন্তর মাসের 7 ই শুরু হওয়া ইত্যাদি would
0 0 * * * [ $(($((
তারিখ +% - জে- 1)) % 3)) == 0 ] && script
বছরের প্রথম দিনটি থেকে শুরু করুন date
, 1 থেকে শুরু করে 0 এ শুরু করুন, এটি তিনটি মডুলো কিনা তা পরীক্ষা করে দেখুন।
( 365-1 ) % 3 == 1
কিন্তু ( 1 - 1 ) % 3 == 0
? আমি ভাবব আরও ভাল গণনাটি ইউনিক্স যুগের পরের দিনগুলির সংখ্যার ভিত্তিতে হবে।