প্রতি মাসের প্রথম সোমবার ক্রোন জব চালাবেন?


32

আমি প্রতি মাসের প্রথম সোমবার সকাল সাড়ে ৮ টায় ক্রোন থেকে একটি চাকরী চালাতে চাই। ক্রোন উইকিপিডিয়া পৃষ্ঠাটি বলেছে

যখন সময় / তারিখের নির্দিষ্টকরণের ক্ষেত্রগুলি সমস্ত বর্তমান সময় এবং তারিখের সাথে মিলে যায় তখন সাধারণত কাজটি কার্যকর করা হয়, তবে একটি ব্যতিক্রম রয়েছে: যদি "মাসের দিন" এবং "সপ্তাহের দিন" উভয়ই সীমাবদ্ধ থাকে ("" "নয়) তবে হয় "মাসের দিন" ক্ষেত্র (3) বা "সপ্তাহের দিন" ক্ষেত্রটি (5) বর্তমান দিনের সাথে অবশ্যই মিলবে।

(আমার জোর)

তার মানে কি আমি মাসের প্রথম সোমবার করতে পারি না, আমি কেবলমাত্র মাসের প্রথম (বা যাই হোক) দিনটি করতে পারি? আমি এটিকে ঘিরে ধরার কোনও উপায় ভাবতে পারি না।


slhck - এটি একটি ভাল সমাধান বলে মনে হচ্ছে - আপনি কি পুরো কোড সহ একটি উত্তরে এটি প্রসারিত করতে আপত্তি করবেন? তারপরে আমি এটিকে সঠিক হিসাবে চিহ্নিত করব :)
ম্যাক্স উইলিয়ামস

উত্তর:


39

আপনি শর্তটি প্রকৃত ক্রন্টব কমান্ডের মধ্যে রাখতে পারেন:

[ "$(date '+%a')" = "Mon" ] && echo "It's Monday"

এখন, যদি এক মাসের প্রথম সাত দিনের একটিতে এই অবস্থাটি সত্য হয় তবে আপনার প্রথম সোমবার হবে। নোট করুন যে ক্রোনট্যাবে, শতাংশ-বাক্য গঠনটি এড়িয়ে যাওয়ার প্রয়োজন যদিও:

0   12  1-7 *   *   [ "$(date '+\%a')" = "Mon" ] && echo "It's Monday"

echoআপনি যে প্রকৃত কমান্ডটি চালাতে চান তা দিয়ে কমান্ডটি প্রতিস্থাপন করুন । আমিও একই রকম পন্থা পেয়েছি ।


আসলে, স্লহ্যাক, আমি খুব শীঘ্রই কথা বলেছি - এটি আমার ক্রোনটেবটিতে কাজ করছে না: কোনও কারণে ডেট টেস্টে সমস্যা হয়েছে বলে মনে হচ্ছে। এটি কমান্ড লাইনে [ "$(date '+%a')" = "Mon" ] && echo "It's Monday"যেমন কাজ করে [ $(date '+%a') = "Mon" ] && echo "It's Monday" তেমনি ক্রোনট্যাবটিতে এটি এই পরীক্ষায় ব্যর্থ হয়েছে বলে মনে হচ্ছে। আমি ক্রোন থেকে কোনও কার্যকর প্রতিক্রিয়া পেতে পারি না: লগতে [ "$(date '+%a')" = "Tue" ] >> /home/deploy/cron.log 2>&1কোনও ত্রুটি আউটপুট ক্যাপচার করার জন্য আমি এটি চেষ্টা করছি কিন্তু
ম্যাক্স উইলিয়ামস

হুঁ। dateআউটপুটটি সঠিক কিনা তা আপনি পরীক্ষা করতে পারেন ? উদাহরণস্বরূপ, কেবল একটি cronকমান্ড চালানো যাক যা এটি কোনও ফাইলে আউটপুট করে: date '+%a' > ~/datetest 2>&1- তাহলে এটি পরীক্ষা করে সঠিক স্ট্রিংয়ের ফল হয়েছে কিনা তা পরীক্ষা করুন।
slhck

1
আমি সমস্যা পাওয়া যায় নি - মধ্যে শতাংশ +%aপলায়নের যখন এটি নিম্নলিখিতরূপে crontab পরিবর্তন ছিল প্রয়োজন, অর্থাত এই হতে প্রয়োজন লাইন: [ "$(date '+\%a')" = "Mon" ] && echo "It's Monday"। আপনি যদি নিজের উত্তরটি এটির সাথে আপডেট করতে পারেন তবে এটি ভবিষ্যতের পাঠকদের জন্য সহায়ক হবে :) আবারও ধন্যবাদ - সর্বাধিক
ম্যাক্স উইলিয়ামস

ওহ, এখন আমি কেন জানি। খুশী এখন এটি কাজ করে, এটি চেষ্টা করে দেখার জন্য ধন্যবাদ!
slhck

15

স্প্যানিশ ভাষায় লোকাল সহ আমার একটি কম্পিউটার রয়েছে, সুতরাং, এই পদ্ধতিটি আমার পক্ষে কাজ করছে না কারণ সোমতে লুন পরিবর্তন হয়

অন্যান্য ভাষাগুলিও ব্যর্থ হবে, সুতরাং, ভাষাটির প্রতিবন্ধকতা গ্রহণকারী গ্রহণযোগ্য উত্তরে আমি কিছুটা প্রকারভেদ করেছি:

 0 9 1-7 * *   [ "$(date '+\%u')" = "1" ] && echo "¡Es lunes!"

+1 ¡মিউ বিয়েন, সিওর!
জেকগল্ড

1
গ্রেসিয়াস ura পুর ভিদা! ; ডি
চুনাচক্র

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। আমার একটি ডাচ লোকাল রয়েছে যা সপ্তাহের দিনগুলির জন্যও বিভিন্ন নাম ব্যবহার করে। এবং সংখ্যা ব্যবহার করাও সপ্তাহের দিন নির্ধারণের জন্য স্ট্রিংগুলির সাথে তুলনা করার চেয়ে পরিষ্কার মনে হয়।
0ne_Up

7

দিনের সংখ্যাগুলি হ্যান্ডেল করার দরকার নেই যখন আমি এটি সহজ করে দেখি।

মাসের প্রথম সোমবার চালান:

0 2 * * 1 [ `date '+\%m'` == `date '+\%m' -d "1 week ago"` ] || /path/to/command

অর্থাৎ যদি 1 সপ্তাহ আগের মাসটি বর্তমান মাসের মতো না হয় তবে আমরা মাসের 1 ম দিন 1 (= সোমবার) এ থাকি on

তেমনি তৃতীয় শুক্রবারের জন্য

0 2 * * 6 [ `date '+\%m'` == `date '+\%m' -d "3 weeks ago"` ] || /path/to/command

অর্থাৎ যদি 3 সপ্তাহ আগের মাসটি বর্তমান মাসের চেয়ে আলাদা হয় তবে আমরা মাসের তৃতীয় দিন 6 (= শুক্রবার) এ থাকি


সপ্তাহের 6 ষ্ঠ দিন শনিবার শুক্রবার নয়।
রবার্ট

4

আমি প্রতি মাসের ৪ র্থ সোমবার বিকেল ৪ টা ৪৫ মিনিটে চালানোর জন্য একটি কাজ নির্ধারণ করেছি:

0 16 22-28 * Mon [ "$(date '+\%a')" == "Mon" ] && touch /home/me/FourthMonOfMonth.txt

1

আমি যতদূর জানি এটি কেবল ক্রোনট্যাব ব্যবহার করা সম্ভব নয়, তবে একজন "মাসের প্রথম সাত দিন" কনট্যাব প্রবেশের মধ্য থেকে সঠিক দিনটি বেছে নিতে একটি মোড়কের ফাংশন ব্যবহার করতে পারেন; দেখতে এই এন্ট্রি থেকে।

মোড়ক স্ক্রিপ্ট হবে

#! /usr/bin/ksh
day=$(date +%d)
if ((day <= 7)) ; then
   exec somecommand
fi
exit 1

এবং ক্রোনটব এন্ট্রি ব্যবহার করে আপনার এটি চালানো দরকার (এটি র‌্যাপার বলা হয় এবং বিশ্বব্যাপী উপলব্ধ ass

0 0 * * 1 wrapper.sh

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

1

সোলারিস 10-এ আমাকে শর্তটি নিম্নরূপে ফর্ম্যাট করতে হয়েছিল:

[ `date +\%a` = "Sat" ] && echo "It's Saturday"

1

আপনি মাসের প্রথম সাত দিন ক্রোনজব চালানোর চেষ্টা করতে পারেন এবং এটি কেবল সোমবার কার্যকর করতে দিন।

30 8 * * 1 [`date +\%d` -le 07] && <job>

উপরে আপনার পক্ষে কাজ করা উচিত।


প্রথম সপ্তাহের জন্য চালানো এবং সোমবারের জন্য চেক করার জন্য আরও +1 আরও সাফল্য রেশন হিট করে। :-)
xmedeko


0

আমি এই ধরণের সমস্যার জন্য একটি সাধারণ সমাধান করেছি, এটি প্রথম, দ্বিতীয়, তৃতীয় ..... মাসের শেষ সপ্তাহের জন্য কাজ করে।

আপনি এটি এর মতো ব্যবহার করতে পারেন:

30 06 * * Mon run-if-today 1 "Mon" && echo "First Monday"
30 06 * * Thu run-if-today 3 "Thu" && echo "Third Thursday"
30 06 * * Sun run-if-today L "Sun" && echo "Last Sunday"

আজকের স্ক্রিপ্টটি চলতি সপ্তাহের দিন এবং কাঙ্ক্ষিত সপ্তাহের তারিখের পরিসীমা উভয়ের জন্য চেক করে, যদি উভয়ই মিলে যায় তবে এটি 0 ফেরত দেয়, অন্যথায় 1।

এখানে কোড চেক করুন। https://github.com/xr09/cron-last-sunday


0

আমি বিশ্বাস করি এটি আরও সুষ্ঠুভাবে সমস্যার সমাধান করে:

30 8 1-7 * 1 /run/your/job.sh

1
ডোহ! : "যদি উভয় ক্ষেত্রই সীমাবদ্ধ থাকে (যেমন, * না হয়), বর্তমান সময়ের সাথে উভয় ক্ষেত্রেই ফিল্ড মিললে কমান্ডটি চালানো হবে।"
সিমকিয়ান

এছাড়াও ফেব্রুয়ারিতে (28 শে শেষ হওয়া এক) এটি প্রতি 4 বছরে চালানো হবে না।
igracitc

"হয়" এর অর্থ তাদের উভয়ই, "উভয়" নয়। এটি মাসের 1 ম 7 দিনের জন্য প্রতিদিন চলবে।
minusf

এই সারিটি প্রতিমাসের প্রথম থেকে সপ্তমীতে এবং পাশাপাশি প্রতি সোমবার একটি কমান্ড চালাবে
টমাসজ জাকুব রুপ

0

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

0 30 8 * 1/1 MON#1

আশাকরি ইহা অন্য কারো সাহায্য করবে। নির্বিশেষে, আমি আপনাকে সব একটি সুন্দর দিন কামনা করি। :-)


এটি ক্রোন নয়, সম্ভবত কোয়ার্টজ
সিভান

-1
0 9 1-7 * 1 * 

এটি প্রতি মাসের প্রতিটি সোমবারের জন্য কাজ করবে।


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