ক্রোন: কেবল ইমেলগুলিতে ত্রুটি পাবেন?


38

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

যখন কোনও কিছু ভুল হয়ে যায় তখনই কেবল সিআরনকে ইমেল প্রেরণ করা সম্ভব? আমার TARইচ্ছা মত কার্যকর করা হয় না?

এই মুহুর্তে আমার ক্রন্টব কীভাবে সেট আপ হয় তা এখানে;

0 */2 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com

অনেক ধন্যবাদ!

উত্তর:


53

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

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh

যদি আপনার স্ক্রিপ্টটি সাধারণত আউটপুট উত্পন্ন করে তবে আপনি ক্রোনটিতে এটি সম্পর্কে চিন্তা করেন না, কেবল এটি / dev / নালকে প্রেরণ করেছেন এবং এটি আপনাকে কেবল তখনই ইমেল করবে যখন স্টাডারকে কিছু লেখা হয়।

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh > /dev/null

9
এটি খুব কমই আদর্শ। কমান্ডটি কোনও শূন্য-ত্রুটিযুক্ত কোডের সাথে শেষ হয়ে গেলে আপনি সাধারণত সম্পূর্ণ আউটপুট (stdout + stderr) আপনাকে ই-মেইল করতে চান। অন্যথায়, কমপক্ষে stdout গাব্বল করা ভাল। আমার কাছে এটি ক্রনের ডিজাইনের ত্রুটি।
উইটিকো

3
@ উইটিকো আমি সম্মত; আমি এই প্রশ্নটি ঠিক করার চেষ্টা করে দেখেছি। আমার ধারণা আপনি আপনার ক্রোন কমান্ড করতে পারেন /bin/backup.sh > log_file || (echo Backup failed with exit status $?; cat log_file)?
ড্যানিয়েল এইচ

22

ক্রনিক র‌্যাপার স্ক্রিপ্ট ব্যবহার করা ভাল ধারণা মত দেখাচ্ছে; এটি ব্যবহার করতে আপনাকে আপনার স্ক্রিপ্টগুলি পরিবর্তন করতে হবে না।

পরিবর্তে:

 0 1 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com

একটি করুন:

 MAILTO=email@example.com
 0 1 * * * cronic /bin/backup.sh

সহজভাবে করা; সবকিছু নির্বিঘ্নে চলতে থাকলে এটি নিঃশব্দে চলে যাবে (প্রস্থান স্থিতি 0), তবে এটি যদি না হয় তবে তা মৌখিকভাবে রিপোর্ট করবে এবং ক্রোন মেল প্রতিবেদন পরিচালনা করতে দেবে।

Https://habis.net/cronic/- এ আরও তথ্য ।


সমস্যাটি কোনও ভুল ক্রোন লাইন ছাড়া আর কিছুই না হলে ক্রোন এটি করতে বলা হয় ঠিক তেমনটি করে যাচ্ছে তা আমি সত্যিই দেখছি না।
জন গার্ডেনিয়ার্স

3
@ জনগার্ডেনিয়ার্স এটি সাহায্য করে কারণ কখনও কখনও আপনার ত্রুটি ছাড়াই আউটপুট থাকে।
মিখাইল

11
বিকল্পভাবে, প্যাকেজটি chronicথেকে moreutils: joeyh.name/code/moreutils
ভ্লাদিমির প্যান্টেলিভ

4

আপনি cronসর্বদা ইমেল প্রেরণের জন্য বিশেষভাবে নির্দেশ দিচ্ছেন, এমনকি যখন /bin/backup.sh( /usr/local/binযাই হোক , এটিতে হওয়া উচিত ) সফল হয়। কেবলমাত্র | mail -s "Backup status" email@example.comঅংশটি বাদ দিন এবং কেবলমাত্র আউটপুট থাকলে ইমেল প্রেরণ করা হবে। আপনি সম্ভবত (আপনার উপর নির্ভর করে cron) স্পষ্টতই ইমেল ঠিকানাটি মেলটিতে ক্রন্টব ফাইলটিতে একটি অ্যাসাইনমেন্ট হিসাবে সেট করতে পারেন।

বিশদ জন্য, দেখুন

man 5 crontab

3

আপনি stderrউভয় stdoutএবং না anmd পরিচালনা করা উচিত stderr

ব্যবহার করবেন 1> /dev/nullনা 2>&1এবং এটি ভাল হতে হবে। এছাড়াও, আপনার ব্যাকআপ স্ক্রিপ্টে আপনাকে ত্রুটিটি সঠিকভাবে জানাতে হতে পারে।


3

এখানে আরও একটি প্রকরণ যা আমি বহু বছর ধরে সফলভাবে ব্যবহার করেছি - আউটপুট ক্যাপচার করুন এবং এটি কেবল ত্রুটির ভিত্তিতে মুদ্রণ করুন , একটি ইমেল ট্রিগার করে। এর জন্য কোনও টেম্প ফাইলের প্রয়োজন নেই, এবং সমস্ত আউটপুট সংরক্ষণ করে । গুরুত্বপূর্ণ অংশটি যা 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 এ আউটপুট দেয় তবে আপনি এখনও ইমেল পাবেন।

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