ক্রোনজব প্রতি শনিবার শনিবার শনিবার থেকে শুরু করে প্রতি সপ্তাহে চলবে


11

আজ শুক্রবার, 3 অক্টোবর, 2014 3:58 পূর্বাহ্ন

নিম্নলিখিত তারিখগুলিতে এটি চালনার জন্য আমি এর মতো ক্রোনজব শিডিউল করতে চাই:

  1. শনিবার, অক্টোবর 4, 2014 8:00 পূর্বাহ্ন
  2. শনিবার, 18 অক্টোবর, 2014 8:00 পূর্বাহ্ন
  3. শনিবার, 1 নভেম্বর, 2014 8:00 পূর্বাহ্ণ ...

সুতরাং প্রতি 2 সপ্তাহ, শনিবার, 8 টা।

উত্তর:


27
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand

date +%W: সোমবারের সাথে বছরের সপ্তাহের সংখ্যা সপ্তাহের প্রথম দিন হিসাবে, আজ সপ্তাহ 39

10#$(date +%W): date +Wদশমিক সংখ্যায় রূপান্তর করুন এবং শেল বেস পার্সিং বিভ্রান্তি এড়ান

$((39%2)): মডুলো অপারেশন: ফলাফল 0 (এমনকি সপ্তাহের সংখ্যা) বা 1 (বিজোড় সপ্তাহের সংখ্যা), এই সপ্তাহের ফলাফল 1, পরের সপ্তাহে 0

test 1 -eq 1: গাণিতিক পরীক্ষা (সমান), এক্ষেত্রে ফলাফলটি বুলিয়ান সত্য

&& yourCommand: বুলিয়ান এবং: yourCommandপূর্ববর্তী কমান্ডের ফলাফলটি বুলিয়ান সত্য হলেই চালান

নোট করুন যে বছরটি দুটি বিজোড় সপ্তাহ পেতে পারে: 53 (এই বছর) এবং 1 (পরের বছর)


2
এটি মার্জিত! এটি এখনও যেমন আপনি উল্লেখ করেছেন, বছরের 53 তম শনিবার এটির একটি কর্নার কেস রয়েছে, যা প্রতি চার শতাব্দীতে প্রায় সত্তর বছর ঘটবে।
ম্যাডহ্যাটার 10

@ সাইরাস আপনার উত্তরের জন্য আপনাকে ধন্যবাদ জানায়, তবে আমি যদি * * * * 5 পরীক্ষা write (($ (তারিখ +% ডাব্লু)% 2)) লিখি - 1 ম && / /02/restore/scriptts/test.sh স্ক্রিপ্টটি করে না রান করুন তবে আমি * * * * 5 /u02/restore/scriptts/test.sh স্ক্রিপ্ট লিখলে স্ক্রিপ্ট চলে। আপনার অভিব্যক্তি কেন কাজ করছে না? আমি কেবল কেসগুলি পরীক্ষা করছিলাম found
কুপা

1
আমার ভুল. ক্রোন% কে নিউলাইন হিসাবে ব্যাখ্যা করে। আপনার ক্রোনজবগে একটি with দিয়ে উভয়কেই পালিয়ে যান:0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
সাইরাস

দুঃখিত ফিরে এই পুরোনো প্রশ্ন আনতে কিন্তু এটা আমার জন্য কাজ করা হয়নি এবং যখন আমি চালানো চেষ্টা $((10#$(date +%W)%2)) -eq 1 && echo OKসপ্তাহে গণনা ফলাফল চালানো আমার শেল চেষ্টা: -bash: 1: command not found। কোনও ক্লু কেন এটি করছে? ধন্যবাদ।
ঝুয়েত

3
@ জুয়েট: testএটি কোনও ব্যবহারকারীর আইটি কমান্ড নয়। চেষ্টা করুন:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
সাইরাস

4

আপনি যা দেখিয়েছেন তা "প্রতি সপ্তাহে"। তারপরে কোডটি হ'ল:

0 8 * * 6

আপনি কি নিশ্চিত যে প্রতি দুই সপ্তাহে এটি চালানো দরকার?

0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand

1
আপনি কি আদেশটি ব্যাখ্যা করতে পারেন, দয়া করে
কুপা

1
সাইরাস যা দিয়েছিলেন তা ব্যবহার করা আরও ভাল - $ (($ (তারিখ +% ডাব্লু))% 2)) "ডাব্লু" বছরের এক সপ্তাহের সংখ্যা হিসাবে দাঁড়িয়েছে। শূন্য থেকে শুরু করে 53 পর্যন্ত। তাই ক্রোনজব প্রতি সপ্তাহে চলতে থাকে তবে 'এক্সপ্রেস' আপনার কম্যান্ডের আদেশ দেয় কেবলমাত্র যদি সপ্তাহের সংখ্যাটি 2 দিয়ে ভাগ করা যায়
গ্লিয়ন

যখন আমি পরীক্ষা run (($ (তারিখ +% ডাব্লু)% 2)) চালাচ্ছি - কমান্ড লাইনের 1 ম বেকার কিছুই ফিরিয়ে দেয় না কেন?
কুপা

1
কেবল echo $?এই আদেশটি চালানোর পরে দৌড়াও , তার রিটার্ন কোডটি দেখতে - এটির সাথে এটি গুরুত্বপূর্ণ
এলা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.