আমি ক্রোনকে কীভাবে বলতে পারি যে প্রতি দিন অন্য একটি কমান্ড চালানো যায় (বিজোড় / এমনকি)


45

"মাসের দিন" ক্ষেত্রটি ব্যবহার করে প্রতিদিন অন্য দিন কমান্ড চালানোর জন্য ক্রোন কনফিগার করার সময়, যেমন:

1 22 */2 * * COMMAND

এটি প্রতিবার চলে মাসের দিনটি বিজোড়: 1,3,5,7,9 ইত্যাদি।

২.6,৮,১০ এর মতো এমনকি অন্যান্য মাসগুলিতে ক্রোন চালানোর জন্য কীভাবে কনফিগার করতে পারি (এটি আক্ষরিকভাবে উল্লেখ না করেই, যা প্রতি মাসে মাসে আলাদা আলাদা সংখ্যা থাকায় সমস্যাযুক্ত)?

উত্তর:


60

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

বাক্য গঠনটি দেখতে এটির মতো হবে:

# Will only run on odd days:
0 0 1-31/2 * * command

# Will only run on even days:
0 0 2-30/2 * * command

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

এই পদ্ধতির একমাত্র 'গ্যাচা' হ'ল যদি আপনি কোনও বিজোড় দিবস চক্রের সাথে থাকেন তবে পরবর্তী মাসগুলি 31 দিন সহ আপনার আদেশটিও মাসের প্রথম দিকে চলবে। একইভাবে আপনি যদি একটি এমনকি চক্র জোর করে রাখেন তবে প্রতিটি লিপ বছর তিন দিনের চক্র এবং ফেব্রুয়ারির শেষের কারণ হয়ে দাঁড়ায়। আপনি সত্যিকার অর্থে এটি পেতে পারেন না যে "প্রতি অন্যান্য দিন" এর যে কোনও নিয়মিত প্যাটার্ন সবসময়ই প্রতি মাসে সমতুল্য বা বিজোড় দিনগুলিতে পড়ে না এবং আপনি যেভাবে এইভাবে চাপ দেন তাতে আপনার অতিরিক্ত রান হবে বা এর মধ্যে কোনও রান মিস হবে না really দিনের সাথে মিস ম্যাচের মাসগুলি।


1
ধন্যবাদ, তবে ফেব্রুয়ারির মতো মাসগুলিতে কী হবে যেখানে আপনার কেবল ২৮ দিন রয়েছে? তারকা আসলে এটি যত্ন করে - তবে প্রকৃতই অস্পষ্ট।
ফ্রেডি

3
@ ফ্রেডি: আমার সম্পাদিত উত্তরটি দেখুন ... তবে এটি একটি নন-ইস্যু কারণ পরিসীমা মানের বাইরে কেবল এড়ানো হবে, 30 বা 31 ফেব্রুয়ারিতে কিছুই হবে না। কখনো। আপনি ম্যানুয়ালি যেমন একটি তালিকা দিয়ে নির্দিষ্ট করতে পারেন 0,2,4...,30,32,34এবং এটি কোনও ব্যাপার নয়, সীমার মানগুলির বাইরে কখনই মিলবে না।
কালেব

1
ধন্যবাদ! আমি বুঝতে পেরেছি, তথ্যপূর্ণ উত্তরের জন্য আপনাকে ধন্যবাদ!
ফ্রেডি

3
উবুন্টু সার্ভার ৮.০৪-তে, মনে হয় যে দিনের শূন্যটি ব্যবহার করে সিনট্যাক্সটি অবৈধ (মাসের খারাপ দিন)। নিম্নলিখিত বাক্য 0 0 2-30/2 * * command

1
ফেডোরা এবং RHEL 5,6,7 এছাড়াও মাসে 0 হিসাবে 0 পছন্দ করে না। হিসাবে ব্যবহারকারী31053 উল্লেখ করেছে: 0 0 2-30/2 * * commandপ্রত্যাশার মতো কাজ করে।
নোয়েলপ্রফ

2

আমি মনে করি কোনও সম্ভাবনা বছরের দিনটি ব্যবহার করছে যেমন:

# for odd days
test $(((`date +%j` % 2))) != 0 && command

# for even days
test $(((`date +%j` % 2))) == 0 && command

এটি ইউনিক্স এবং লিনাক্স সিস্টেমের জন্য পরীক্ষা করা হয়।


আমি এই উত্তরটি পছন্দ করি কারণ এটি কয়েক মাসের সাথে অদ্ভুত দিনের সাথে সমস্যাটি এড়িয়ে যায়। যাইহোক আমি ডলার স্বরলিপি পরিবর্তে ব্যাকটিক্সের পরামর্শ দিই:test $(($(date +%j) % 2)) == 0 && command
ক্যালিগারি

আমি পর্যালোচনা করেছি যে% j জুলিয়ান তারিখ নয়, সুতরাং নতুন বছরের রূপান্তর এড়ানো সেরা কোডটি অবশ্যই কয়েক সেকেন্ড সহ গণনা করা উচিত:test $(($(date +%s) / 86400 % 2)) == 0 && command
ক্যালিগারি

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

1

আসুন প্রতিদিন এটি পরীক্ষা করা যাক এটি কোনও "অন্য" :-) ( bcপ্রোগ্রামের প্রয়োজন)

0 0 * * * test $(echo `date +%s` / 86400 % 2 == 0 |bc) -eq 0 && command

(আমি নিশ্চিত নই যে কোডটি সঠিকভাবে উপস্থিত হয়েছে date +%spart অংশটি ব্যাক-অ্যাডোস্ট্রোফের মধ্যে রয়েছে))


এটি প্রতিটি অন্যান্য দিন চলবে তবে প্রশ্নের উত্তর দেয় না! এটি এখনও কখনও কখনও বিজোড় দিনগুলিতে কখনও কখনও মাসের উপর নির্ভর করে এমনকি কয়েক দিন পর্যন্ত চলবে। এটিতে প্রশ্নের কোডের মতো একই ফলাফল রয়েছে, আপনি যুগে যুগে থেকে কয়েক সেকেন্ড পরে নিজের গণিতটি করে ফলাফলটিতে পৌঁছে যাচ্ছেন। এটি যুগের আগের দিনগুলিতে চলে তবে আমাদের ক্যালেন্ডারের এমনকি দিনগুলিতে নয়।
কালেব

1

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

শেষ রান করার পরে একটি সহজ স্ট্যাটাস ফাইল তৈরি করা এবং তারপরে তুলনা করা খুব সহজেই কাজ করবে।

এটি যদি বিভিন্ন উত্সের মাধ্যমে চালানো দরকার হয় তবে এটিকে যুক্তি-নির্ভর করুন।

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