প্রতি তিন দিন পর পর ক্রোন জব


94

প্রতি তিন দিন পরে কি ক্রোনজব চালানো সম্ভব ? অথবা 10 বার / মাসে হতে পারে।


4
হ্যাঁ এটি সম্ভব এবং এটি সুপার ইউজারের সাথে সম্পর্কিত।

মাসের সীমা নির্বিশেষে প্রতি 3 দিন চলমান অ্যানোক্রন দিয়ে করা যেতে পারে।
রায়ানপ্যাটিসন

উত্তর:


129

প্রতি তিন দিন পরে এটি চালান ...

0 0 */3 * *

কীভাবে?

আপনি যদি এটি চান যে 1 ম, 4 র্থ, 7 তম ইত্যাদি মাসের নির্দিষ্ট দিনগুলিতে চালিত হয় ... তবে আপনার স্ক্রিপ্টে আপনি কেবলমাত্র শর্তযুক্ত থাকতে পারেন যা মাসের বর্তমান দিনের জন্য পরীক্ষা করে।

if (((date('j') - 1) % 3))
   exit();

বা, যেমন @ মারিও উল্লেখ করেছেন, আপনি মাসের দিনের ভিত্তিতে বছরের পরিবর্তে তারিখ ('কে') ব্যবহার করতে পারেন।


9
@ ওয়াটশাকিন: আপনি "প্রতি তিন দিন" কতটা সঠিক হতে চান তা নির্ভর করবে। এটি যে কোনও দিনে 3 দ্বারা বিভাজ্য কাজ করবে month মাসের সীমানায় এটি সঠিক হবে না।
ডেভিড 21

4
: @whatshakin: cronjob সিনট্যাক্স এমনকি উইকিপিডিয়ার বর্ণনা করা হয়েছে en.wikipedia.org/wiki/Cronjob
ফেলিক্স Kling

4
এটি গুগলে একটি খুব উচ্চ ফলাফল, এবং যেমন গ্রহণযোগ্য উত্তর সঠিক ছিল তবে এটি ভাল হবে, যা এটি নয়। আমি বিশ্বাস করি তারেকোর ব্যাখ্যা সঠিক।
লিংকগুলি

14
উত্তরটি সঠিক নয় কারণ কোনও প্রস্তাবই আসলে প্রতি 3 দিন পরে কাজ চালায় না। 0 0 */3 * *মানে ১ লা, চতুর্থ, সপ্তম, ইত্যাদি চালানো ( */3মানে 1-31/3অর্থ 1,4,7...31) যাতে মাসের শেষে ব্যবধানটি আরও কম হয়ে যায়। (এটি পূর্ববর্তী মাসে ৩১ দিন হলে টানা ২ দিন চলবে)) date('j') % 3প্যাটার্নটি প্রতিবছর পুনরায় চালু হয় এবং বছরগুলিতে ৩. দ্বারা বিভাজ্য সংখ্যক দিন থাকে না
সিজেএম

8
আমিও দুর্ভাগ্যজনকভাবে বিবেচনা করি যে এটি উত্তর হিসাবে গ্রহণ করা হয়েছিল। আমি মাসের সীমা নির্বিশেষে প্রতিটি এন দিনের জন্য সন্ধান করছিলাম (উদ্ভিদের মতো জিনিসগুলি তাদের মাসের কোন দিন তারা জল পান সেদিকে খেয়াল রাখে না)। কমপক্ষে আমি মনে করি আমি সমস্ত মন্তব্য পড়ার পরে দৃ determined়সংকল্পবদ্ধ হয়েছি যে ক্রোন টাইমার নিজেই সেই ইচ্ছাটিকে পুরোপুরি মডেল করে না।
ট্র্যাভিস গ্রিগস

70
* * */3 * *  that says, every minute of every hour on every three days. 

0 0 */3 * *  says at 00:00 (midnight) every three days.

ব্যাখ্যাটির প্রশংসা করুন
পাইথোনিয়ান 29033

4
এটি সাধারণত প্রতি তিন দিন আগুন জ্বলে উঠবে, তবে পরের দিন এক মাসের শুরুতে গুলি
চালাতে পারে

24

আমি ক্রোন বিশেষজ্ঞ নই, তবে কীভাবে:

0 */72 * * *

এটি প্রতি 72 ঘন্টা অন্তরায় ব্যতীত চলবে।

https://crontab.guru/#0_ / 72_ _ _


4
এটি গৃহীত সমাধানের চেয়ে আরও সঠিক। মাস পরিবর্তন করার পরে গৃহীত উত্তরটি ব্যর্থ হবে:then at 2019-02-28 00:00:00 then at 2019-03-01 00:00:00
আকিরা ইয়ামামোটো

এটি কখন ঘটবে তা গণনা করবে কীভাবে?
ব্রুস এজ

4
Crontab.guru এর মতে এটি প্রতিদিন চলে। কে ঠিক আছে?
ভোল্টে

4
ঘন্টা কলামের মান crontab.guru এবং man crontab অনুসারে 0 এবং 23 এর মধ্যে পড়তে হবে
হার্পারভিল

4
* / 72 কার্যকরভাবে 0 এর সমান This এটি প্রতি মধ্যরাতে চলে।
battey

19

ক্রোন "স্টেটলেস" হওয়ায় এটি "ফ্রিকোয়েন্সি" নির্ভুলভাবে প্রকাশ করতে পারে না, কেবলমাত্র "নিদর্শন" যা বর্তমান সময়ের তুলনায় এটি (দৃশ্যত) ধারাবাহিকভাবে মেলে।

আপনার প্রশ্নের পুনর্বিবেচনা এটি আরও স্পষ্ট করে তুলেছে: "2 রাতের মধ্যে যখন চলেছিল তখন রাত্রে এড়িয়ে যাওয়া ছাড়াও কি প্রতিদিন রাত 1 টা 1 মিনিটে ক্রোনজব চালানো সম্ভব?" ক্রোন যখন বর্তমান সময়ের সাথে কাজের অনুরোধের সময় নিদর্শনগুলির সাথে তুলনা করছে, ক্রোন এটি জানতে পারে না যে এটি অতীতে আপনার কাজটি চালিয়েছিল কিনা।

সাধারণত আপনাকে সেই পুনরাবৃত্ত ইভেন্টটি শেষ করতে হবে এবং সম্পূর্ণ নতুন একটি পুনরায় চালু করতে হবে; এটি জটিল ক্যালেন্ডার অ্যাপ্লিকেশনগুলি পুনরাবৃত্তি করার নিদর্শনগুলিকে কীভাবে উপস্থাপন করে তার সীমাবদ্ধ অভিব্যক্তি চিত্রিত করে। এবং অবশ্যই ক্যালেন্ডারগুলির প্রচুর অবস্থা রয়েছে - প্রতিটি পৃথক ইভেন্ট মুছে ফেলা বা পুনরায় নির্ধারণ করা যেতে পারে [বেশিরভাগ ক্যালেন্ডার অ্যাপ্লিকেশনগুলিতে]।

তদতিরিক্ত, আপনি সফল হলে প্রতি তৃতীয় রাতে আপনার কাজটি করতে চান , তবে শেষ ব্যর্থ হলে অবিলম্বে আবার চেষ্টা করুন, সম্ভবত পরের রাতে (আরও 3 দিন অপেক্ষা করবেন না) বা আরও তাড়াতাড়ি, এক ঘন্টা পরে (তবে পুনরায় চেষ্টা বন্ধ করুন) সকালে আসার পরে)। স্পষ্টতই, ক্রোন সম্ভবত আপনার কাজ সফল হয়েছে কিনা তা জানতে পারে না এবং প্যাটার্নটি বিকল্পের সাথে আরও ঘন ঘন "পুনরায় চেষ্টা করুন" সময়সূচীও প্রকাশ করতে পারে না।

যেভাবেই - আপনি নিজের যা করতে চান তা করতে পারেন। একটি স্ক্রিপ্ট লিখুন, ক্রোনকে এটি রাত্রে 00:01 am চালাতে বলুন। এই স্ক্রিপ্টটি এমন কোনও কিছুর টাইমস্ট্যাম্প যাচাই করতে পারে যা "শেষ রান" রেকর্ড করে এবং যদি এটি 3 দিন আগে ** হয় তবে কাজটি সম্পাদন করুন এবং "শেষ রান" টাইমস্ট্যাম্পটি পুনরায় সেট করুন।

(* যে টাইমস্ট্যাম্পড ইনডিকেটরটি কিছুটা স্থির অবস্থার যা আপনি পরিচালনা ও পরীক্ষা করতে পারেন, তবে কোন ক্রোন তা করতে পারে না)

** আপনি যদি মানব-পঠনযোগ্য ঘড়ির সময় - বছরে দু'বার ব্যবহার করেন, তবে কিছু দিনের তাদের দিনগুলিতে ২৩ বা ২৫ ঘন্টা সময় থাকে এবং 02: 00-02: 59 একদিনে দু'বার হয় বা না হয় সব। এটি এড়াতে ইউটিসি ব্যবহার করুন।


7
0 0 1-30/3 * *

এটি প্রতি তিন দিন পরে প্রথম থেকে শুরু হবে। এখানে নির্ধারিত ২০ টি রান -

  • 2015-06-01 00:00:00
  • 2015-06-04 00:00:00
  • 2015-06-07 00:00:00
  • 2015-06-10 00:00:00
  • 2015-06-13 00:00:00
  • 2015-06-16 00:00:00
  • 2015-06-19 00:00:00
  • 2015-06-22 00:00:00
  • 2015-06-25 00:00:00
  • 2015-06-28 00:00:00
  • 2015-07-01 00:00:00
  • 2015-07-04 00:00:00
  • 2015-07-07 00:00:00
  • 2015-07-10 00:00:00
  • 2015-07-13 00:00:00
  • 2015-07-16 00:00:00
  • 2015-07-19 00:00:00
  • 2015-07-22 00:00:00
  • 2015-07-25 00:00:00
  • 2015-07-28 00:00:00

4
2015-07-31 00:00:00, 2015-08-01 00:00:00 ... রানের মধ্যে
OOPS

5

আমি মনে করি না যে আপনার যা প্রয়োজন তা আপনার কাছে রয়েছে:

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

3

কেমন:

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স্ক্রিপ্ট বছরের শেষ পরই ভুল।


3

আপনার বেসিকগুলি শিখতে হবে 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

আপনি যদি সোমবার এবং বৃহস্পতিবারে এটি চালানোর জন্য কনফিগার করেন তবে এটি সহজ হবে যা এটিকে একটি 3 এবং 4 দিনের বিরতি দেয়।

অন্যথায় এটি দৈনিক চালনার জন্য কনফিগার করুন তবে আপনার পিএইচপি ক্রোন স্ক্রিপ্টটি প্রারম্ভিক দিয়ে প্রস্থান করুন:

if (! (date("z") % 3)) {
     exit;
}

0

আপনি যদি এটি চান যে 1 ম, 4 র্থ, 7 তম ইত্যাদি মাসের নির্দিষ্ট দিনগুলিতে চালিত হয় ... তবে আপনার স্ক্রিপ্টে আপনি কেবলমাত্র শর্তযুক্ত থাকতে পারেন যা মাসের বর্তমান দিনের জন্য পরীক্ষা করে।

আমি ভেবেছিলাম এর জন্য আপনার যা যা প্রয়োজন তা ছিল * / 3 এর পরিবর্তে যা প্রতি তিন দিন অন্তর্ভুক্ত থাকে, 1/3 ব্যবহার করুন যার অর্থ প্রতি তিন দিন পর মাসের 1 তারিখ থেকে শুরু হয়। সুতরাং 7/3 এর অর্থ প্রতি তিন দিন অন্তর মাসের 7 ই শুরু হওয়া ইত্যাদি would


0

0 0 * * * [ $(($((তারিখ +% - জে- 1)) % 3)) == 0 ] && script

বছরের প্রথম দিনটি থেকে শুরু করুন date, 1 থেকে শুরু করে 0 এ শুরু করুন, এটি তিনটি মডুলো কিনা তা পরীক্ষা করে দেখুন।


এই হিক্কা যখন এটি আগামী বছরের একটি অ-লীপ ইয়ার থেকে ছুয়ে, যেহেতু না উইল ( 365-1 ) % 3 == 1কিন্তু ( 1 - 1 ) % 3 == 0? আমি ভাবব আরও ভাল গণনাটি ইউনিক্স যুগের পরের দিনগুলির সংখ্যার ভিত্তিতে হবে।
কিমিওসির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.