প্রতি অন্য সপ্তাহে ক্রোনটির মাধ্যমে একটি স্ক্রিপ্ট চালান


12

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

এই মুহুর্তে, আমি একটি স্ক্রিপ্ট তৈরির দিকে ঝুঁকছি যা প্রতি সপ্তাহে সবে চলবে এবং যখন এটি চালিত হবে তখন একটি "পতাকা" ফাইলটি স্পর্শ করবে এবং যদি এটি চালিত হয় এবং ফাইলটি ইতিমধ্যে সেখানে থাকে তবে ফাইলটি সরিয়ে ফেলতে (এবং সম্পাদন না করে) দ্বি-সাপ্তাহিক ক্রিয়া)।

আমার প্রশ্নটি হ'ল প্রতি সপ্তাহে স্বয়ংক্রিয়ভাবে চলমান ক্রিয়াকলাপের স্ক্রিপ্টের এই লক্ষ্যটি অর্জন করার জন্য আর কোনও মার্জিত বা সহজ উপায় কি?

ধন্যবাদ!


1
ফ্ল্যাগ ফাইলের পরিবর্তে, আপনি আইএসও সপ্তাহের নম্বরগুলি ব্যবহার করতে পারেন। (যেমন স্ট্রফটাইমের% ভি।)

@ রোজার: আমি অনুমান করি আপনি স্ক্রিপ্টের মধ্যে শর্তসাপেক্ষে বোঝাতে চাইছেন।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@ ডেনিস: হতে হবে না (যেমন আমার উত্তরটি স্ক্রিপ্টের বাইরে কীভাবে পরীক্ষা করে দেখুন) তবে আমার মূল বিষয়টি এটি অনেক সহজ হবে এবং ফাইল সিস্টেমের কোনও রাজ্যের প্রয়োজন নেই। যাইহোক, আমি বুঝতে পেরেছিলাম যে এটির মাসের চেকিংয়ের মতোই একটি অনর্থ রয়েছে: কিছু বছর 53 সপ্তাহ এবং

উত্তর:


11
0 0 * * Thu bash -c '(($(date +\%s) / 86400 \% 14))' && your-script

আমি আমার গণিত করতে বাশ ব্যবহার করেছি কারণ আমি অলস; আপনার পছন্দ মত যা পরিবর্তন করুন। আমি 1 জানুয়ারী, 1970 কে বৃহস্পতিবার হওয়ার সুবিধা গ্রহণ করি; সপ্তাহের অন্যান্য দিনের জন্য আপনাকে একটি অফসেট প্রয়োগ করতে হবে। ক্রোন প্রয়োজন শতাংশ লক্ষণ এড়ানো।

দ্রুত যাচাই:

function check {
  when=$(date --date="$1 $(($RANDOM % 24)):$(($RANDOM % 60))" --utc)
  echo -n "$when: "
  (($(date +%s --date="$when") / 86400 % 14)) && echo run || echo skip
}

for start in "2010-12-02" "2011-12-01"; do
  for x in $(seq 0 12); do
    check "$start + $(($x * 7)) days"
  done
  echo
done

দ্রষ্টব্য আমি বৃহস্পতিবার যে কোনও সময় চালানো হলে এটি কাজ করবে তা দেখানোর জন্য এলোমেলো সময়গুলি বেছে নিয়েছি এবং যে তারিখগুলি বছরের সীমানা অতিক্রম করে প্লাস 4 এবং 5 উভয় বৃহস্পতিবার সহ মাস অন্তর্ভুক্ত করে chosen

আউটপুট:

Thu Dec  2 06:19:00 UTC 2010: run
Thu Dec  9 23:04:00 UTC 2010: skip
Thu Dec 16 05:37:00 UTC 2010: run
Thu Dec 23 12:49:00 UTC 2010: skip
Thu Dec 30 03:59:00 UTC 2010: run
Thu Jan  6 11:29:00 UTC 2011: skip
Thu Jan 13 13:23:00 UTC 2011: run
Thu Jan 20 20:33:00 UTC 2011: skip
Thu Jan 27 16:48:00 UTC 2011: run
Thu Feb  3 17:43:00 UTC 2011: skip
Thu Feb 10 05:49:00 UTC 2011: run
Thu Feb 17 08:46:00 UTC 2011: skip
Thu Feb 24 06:50:00 UTC 2011: run

Thu Dec  1 21:40:00 UTC 2011: run
Thu Dec  8 23:24:00 UTC 2011: skip
Thu Dec 15 22:27:00 UTC 2011: run
Thu Dec 22 02:47:00 UTC 2011: skip
Thu Dec 29 12:44:00 UTC 2011: run
Thu Jan  5 17:59:00 UTC 2012: skip
Thu Jan 12 18:31:00 UTC 2012: run
Thu Jan 19 04:51:00 UTC 2012: skip
Thu Jan 26 08:02:00 UTC 2012: run
Thu Feb  2 17:37:00 UTC 2012: skip
Thu Feb  9 14:08:00 UTC 2012: run
Thu Feb 16 18:50:00 UTC 2012: skip
Thu Feb 23 15:52:00 UTC 2012: run

2
দ্বিতীয়টি যেহেতু যুগটি সহজাতভাবে ইউটিসিতে থাকে, যখন ক্রোন স্থানীয় সময়ে চলে। যদি আপনার সিস্টেমের টাইমজোনটি ইউটিসি না হয় তবে এটি বিভ্রান্তির সৃষ্টি করবে। ("কেন এটি চলমান না? ওহ, এটি ইতিমধ্যে ইউটিসিতে শুক্রবার")। দিবালোক সংরক্ষণ সময়ের অস্তিত্ব এটিকে প্রায় কাজ করা আরও কঠিন করে তোলে (যদিও অসম্ভব নয়, যেহেতু তারিখের
দিনটি

5

atআপনি যদি লিনাক্স চালাচ্ছেন তবে ইউটিলিটিটি ব্যবহার করার একটি উপায় হতে পারে । আপনি এটি আপনার স্ক্রিপ্টের শেষে রাখতে পারেন:

at X + 2 weeks -f myscript

আপনি যেখানে আপনার স্ক্রিপ্টটি চালাতে চান সেই সময় X atপ্রথমবার যখন আপনি এটি চালাতে চান তার জন্য কেবল কলটি শুরু করতে এবং তারপরে উপরের বিবৃতিটি আপনার নির্ধারিত কলটি পুনর্নবীকরণ করে।


যদি এটি দীর্ঘমেয়াদী সমাধান হতে চলেছে তবে আমি এটি চালানোর পরামর্শ দিই না যদিও আমি স্ক্রিপ্টে একটি ফাংশন তৈরি করব যা এটি চালানো দরকার কিনা তা কার্যকর করবে
পল

3

আপনি যদি anacronসিস্টেমে ব্যবহার করতে পারেন তবে জিনিসগুলি অনেক সহজ হবে। ব্যবহার করার জন্য anacronআপনার অবশ্যই এটি ইনস্টল থাকা উচিত এবং আপনার অবশ্যই রুট অ্যাক্সেস থাকতে হবে। এটি পুরানো সিস্টেমে (অর্থাত্ RHEL 5.x) কাজ করে না, কেবলমাত্র অ্যানক্রোনর পুরানো সংস্করণগুলি কেবল বুট আপ চলমান। এটি আরও নতুন সিস্টেমে কাজ করে (অর্থাত্ RHEL 6.x)।

এর মাধ্যমে anacron, কেউ আরও নমনীয় উপায়ে কাজের সময় নির্ধারণ করতে পারে, উদাহরণস্বরূপ, সপ্তাহে একবার এক্স জব চালান। এছাড়াও anacronকাজ চালায় যখন কম্পিউটার উপলব্ধ হলে, IE আপনি বিবেচনা যখন সিস্টেম নিচে আপ বা হবে না।

প্রতি সপ্তাহে একটি স্ক্রিপ্ট চালাতে, আপনাকে / etc / anacrontab এর সাথে অনুরূপ একটি লাইন যুক্ত করতে হবে:

14 5 myScript script.sh

বিশদ জন্য ম্যান পৃষ্ঠা দেখুন।


ব্যবহার anacronকরা পরিষ্কারভাবে পরিষ্কার সমাধান আইএমও (যদি কিছু লোকের জন্য এটির কিছু অযাচিত পরিণতি না হয়)।
জানু

0

আমি নিশ্চিত নই যে প্রতি অন্য সপ্তাহে সংজ্ঞায়িত করার জন্য আরও মার্জিত উপায় আছে কিনা তবে এটি আপনার পক্ষে কার্যকর হতে পারে।

00 06 1-7,15-21 * * test `date +\%a` = Thu && /path/to/script

এটি স্ক্রিপ্টটি মাসের প্রথম এবং তৃতীয় বৃহস্পতিবার সকাল :00 টা ৪০ মিনিটে চালু করবে।


2
যদিও 3 মাস বৃহস্পতিবার সহ এক মাস আছে তবে এটি এক সপ্তাহ এড়িয়ে যাবে।
ডেভিড জেড

1
এমন এক মাস আছে যেখানে মাত্র ৩ টি বৃহস্পতিবার আছে? যদিও আমি দেখতে পাচ্ছি এটি বৃহস্পতিবার হলে এক সপ্তাহে এড়িয়ে যায়। এটা তোলে আপডেট করা যাবে 1-7,15-21,29-31, কিন্তু যদি সেখানে গত সেট জন্য কোনো মিল ছিল তারপর, এটা ব্যাক টু ব্যাক চালানো হবে ...
pferate

1
3 বৃহস্পতিবারের মধ্যে, আপনি কি 3 টি বৃহস্পতিবারের অর্থ স্ক্রিপ্টটি চালাবেন এবং মোট 3 টি বৃহস্পতিবার নয়? আমি এটি প্রথমবার ভুল লিখেছি।
পেফেট করুন

0

আমি প্রতি সপ্তাহে এটি চালাতাম, এবং সপ্তাহের নম্বরটি একটি বিজোড় সংখ্যা কিনা তা দেখতে স্ক্রিপ্ট চেক করিয়ে দেব: যদি হ্যাঁ প্রস্থান হয়।

এটি ডিসেম্বর থেকে জানুয়ারী পর্যন্ত কাজ করার জন্য আরও কিছু চিন্তাভাবনা প্রয়োজন।

সম্ভবত স্ক্রিপ্টটিতে একটি "শেষ সফল রান" পতাকা ফাইল সেট করা আছে। যখন স্ক্রিপ্টটি চালু হয়, 14 দিনের আগে পতাকাটির ফাইলটি শেষবার সংশোধন করা হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.