ত্রুটি না থাকলে ক্রোন ইমেল অক্ষম করবেন?


12

ত্রুটি থাকলে আমি কীভাবে ক্রোন থেকে ইমেল পেতে পারি?

অতিমাত্রায় বিস্তৃত ক্ষেত্রে, কাজগুলি ঠিকঠাক হবে - এবং আমি আউটপুটটির পক্ষে সত্যই যত্ন করি না।

এটি কেবল ব্যর্থতার বিরল ক্ষেত্রেই আমি জানতে / জানতে চাই।

আমার প্রোমেল উপলব্ধ রয়েছে - তবে আমি যা বর্ণনা করছি তা "সঠিকভাবে" ক্রোন করার জন্য বাহ্যিকভাবে পরিচালনা করা সম্ভব কিনা তা নিশ্চিত নই।


কি যদি crond নিজেই চলমান না? নাকি মেশিন অফলাইনে আছে? এ কারণেই আমি ক্রোন থেকে ইমেলগুলি নিয়ে কখনই মাথা ঘামাই না এবং উত্সর্গীকৃত ক্রোন নিরীক্ষণ পরিষেবা ব্যবহার করি না। আমি WDT.io এর আংশিক এবং এটি সুপারিশ।
ক্রিশ্চান পেকেলার

উত্তর:


8

আপনি যদি আউটপুটটির যত্ন নিচ্ছেন না, আপনি কোনও কাজের /dev/nullSTDOUT পুনর্নির্দেশ করতে পারেন এবং STDERR কে মেল ( MAILTOপরিবেশগত পরিবর্তনশীল ব্যবহার করে ) মাধ্যমে প্রেরণ করতে দিতে পারেন ।

সুতরাং, উদাহরণস্বরূপ:

...
...
MAILTO=foobar@example.com
...
...
* * * * * /my/script.sh >/dev/null

কেবল এসটিডিআরআরতে (এসটিডিআরআর সহ) আউটপুট থাকলে মেল প্রেরণ করা হবে এবং এসটিডিআউট বাতিল করে দেবে।

এটি অবশ্যই ধরে নিয়েছে যে যখন কোনও প্রোগ্রাম এসটিডিআরআর-তে লিখেছিল, ব্যর্থ হয়েছে; এটি সর্বদা ক্ষেত্রে নাও হতে পারে। আপনার যদি প্রোগ্রামটির নিয়ন্ত্রণ থাকে তবে আপনি এটি করতে পারেন। যে কোনও জটিল ক্ষেত্রে, আপনার কোনও ধরনের একটি মোড়ক লিখতে হবে যা কমান্ড (গুলি) চালায় এবং সেই অনুযায়ী মেল প্রেরণ করুন। এবং মোড়কে cronচাকরি হিসাবে রাখুন ।


1
এই পদ্ধতির খারাপ দিকটি যখন এটি ব্যর্থ হয় আপনি কেবল এসটিডিআরআর আউটপুট পান যা আপনার সম্পূর্ণ আউটপুট থাকলে তার চেয়ে নির্ণয়কে আরও শক্ত করে তুলতে পারে।
প্লাগওয়াশ

11

chronicথেকে কমান্ড moreutils কমান্ড শান্তভাবে রান যদি না তা ব্যর্থ।

এর ম্যানুয়াল থেকে উদ্ধৃতি:

দীর্ঘস্থায়ী একটি কমান্ড চালায় এবং এর কমান্ডটি ব্যর্থ হলে (ননজারো বা ক্র্যাশগুলি প্রস্থান করে) কেবলমাত্র তার স্ট্যান্ডার্ড আউট এবং স্ট্যান্ডার্ড ত্রুটি প্রদর্শিত হবে। কমান্ডটি সফল হলে, কোনও বহিরাগত আউটপুট লুকানো থাকবে।

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


8

ত্রুটি থাকলে আমি কীভাবে ক্রোন থেকে ইমেল পেতে পারি?

আপনি ক্রোনের অনুরোধগুলি ক্রোনিকের সাথে আবদ্ধ করতে পারেন , একটি শেল স্ক্রিপ্ট যা ক্রোন আউটপুট খায় যদি না অনুরোধ করা প্রক্রিয়ার রিটার্ন কোডটি শূন্য না হয় বা অ-ট্রেস ত্রুটি আউটপুট না থাকে।

ক্রনিক ব্যবহার করতে, স্ক্রিপ্টটি কোনও উপযুক্ত স্থানে ডাউনলোড করুন /usr/local/bin। আপনার ক্রোনটব এন্ট্রিগুলি অবশ্যই স্ক্রিপ্টের (যেমন /usr/local/bin/cronic) পাথের সাথে উপসর্গ করা উচিত , বা সহজভাবে cronic, যদি আপনার PATHসঠিকভাবে সেট করা থাকে।

মনে রাখবেন যে "ত্রুটিগুলি" আপনার প্রশ্নের একটি সংজ্ঞায়িত শব্দ এবং সতর্কতার সাথে সংজ্ঞা প্রয়োজন। ক্রোনিকটি কার্যকর হওয়ার জন্য, আপনি অবশ্যই ক্রোনিক রিপোর্ট ত্রুটিযুক্ত যে কাজগুলি একটি ত্রুটি শর্তটি সংজ্ঞায়িত করেছেন সেগুলির একটিতে অবশ্যই তা আবশ্যক ensure প্রতিবেদনের অন্তর্নিহিত পদ্ধতিগুলি যেমন পাঠ্য স্ট্রিংগুলি লেখার STDOUTজন্য ক্রনিক বা অন্য ক্রোন প্রতিবেদনের সাথে এটি সামঞ্জস্যপূর্ণ করার জন্য আরও চিন্তাভাবনা করা প্রয়োজন।

ক্রোনিক সাইট থেকে সংযুক্ত হিসাবে অন্যান্য মোড়ক পাওয়া যায়:


1
এর cronicসাথে সম্পর্কিত chronic, নাকি এটি কেবল কাকতালীয় ঘটনা?
টবি স্পিড

@ টবিস্পাইট কাকতালীয় মনে হয়। আগেরcronic জবাবটিতে chronicযেমন প্রস্তাব করা হয়েছে তেমন পার্ল স্ক্রিপ্টটি ব্যাশে প্রয়োগ করা হয়েছে ।
কসমিক অসিফ্রেজ

4

এখানে আরও একটি প্রকরণ যা আমি বহু বছর ধরে সফলভাবে ব্যবহার করেছি - আউটপুট ক্যাপচার করুন এবং কেবল ত্রুটির ভিত্তিতে মুদ্রণ করুন । এর জন্য কোনও টেম্প ফাইলের প্রয়োজন নেই এবং সমস্ত আউটপুট সংরক্ষণ করে । গুরুত্বপূর্ণ অংশটি যা 2>&1STDERR কে STDOUT এ পুনঃনির্দেশ করে।

ডিফল্ট ক্রোন মেলার কনফিগারেশনের মাধ্যমে পুরো আউটপুট প্রেরণ করুন:

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"

একই তবে একটি নির্দিষ্ট ঠিকানা এবং বিষয় সহ:

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address

এমনকি আপনি ত্রুটিতে একাধিক ক্রিয়া সম্পাদন করতে এবং ইমেলটিতে যুক্ত করতে পারেন:

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }

এটি সাধারণ কমান্ডগুলির জন্য কাজ করবে। যদি আপনি জটিল পাইপ ( find / -type f | grep -v bla | tar something-or-other) ব্যবহার করে থাকেন তবে কমান্ডটি কোনও স্ক্রিপ্টে স্থানান্তর করা এবং উল্লিখিত পদ্ধতির সাহায্যে স্ক্রিপ্টটি চালানো ভাল। কারণটি হ'ল যদি পাইপের কোনও অংশ STDERR এ আউটপুট দেয় তবে আপনি এখনও ইমেল পাবেন।


আপনি করা উচিত $OUTPUTউদ্ধৃতির মধ্যে: "$OUTPUT"
জি-ম্যান

@ জি-ম্যান ফেয়ার পয়েন্ট, সর্বদা একটি সুযোগ থাকে যে আউটপুটটিতে "-n" বা অনুরূপ কিছু থাকতে পারে।
আকোম

0

আমি সম্ভবত এটি সমস্ত ভাবেই ভাবিনি, তবে

* * * * * yourthing.sh >/tmp/yourthing.log && rm -f /tmp/yourthing.log; cat /tmp/yourthing.log 2>/dev/null

, সাধারণ ক্ষেত্রে, অস্থায়ী ফাইলটিতে সমস্ত কিছু পুনর্নির্দেশ করা হবে (আপনি সম্ভবত mktempএকটি অনন্য ফাইলের নামটি ব্যবহার করতে চাইবেন ), ফাইলটি সফল হলে মুছে catফেলবেন এবং তারপরে সামগ্রীগুলি এখনও বিদ্যমান থাকলে (যেমন আপনারথিং.শ প্রস্থান করেছেন) ত্রুটি শর্ত সহ), ক্রোন মেইলারের দ্বারা নেওয়া হবে।

যদি মেমরিটি পরিবেশন করে তবে আউটপুট না থাকলে ক্রোন ইতিমধ্যে কিছু পাঠায় না, সুতরাং লগ ফাইলটি খালি থাকলে বা উপস্থিত না থাকলে কিছুই ঘটে না। (আমরা ত্রুটি বার্তাকে পুনর্নির্দেশ করি।)

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