उबंटू में क्रोन-नौकरियों से ई-मेल कैसे प्राप्त करें?


45

मैं उबंटू में क्रोन-जॉब्स बनाता हूं, जिसमें से एक में निष्पादन योग्य रखकर /etc/cron.{daily,hourly,monthly,weekly}। क्रोन से शुरू होने वाली बहुत सी निर्देशिकाएँ हैं:

kent@rat:~$ ls -ld /etc/cron*
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.d
drwxr-xr-x 2 root root 4096 2009-07-16 13:17 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.monthly
-rw-r--r-- 1 root root  724 2009-05-16 23:49 /etc/crontab
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.weekly

मैं अपनी स्क्रिप्ट से ई-मेल प्राप्त करना चाहूंगा जब:

  1. एक स्क्रिप्ट विफल हो जाती है और गैर-शून्य का निकास कोड देती है।
  2. स्क्रिप्ट में मुझे बताने के लिए कुछ है

मेरे पास SSMTP स्थापित है और काम कर रहा है, मैं अपने Google-खाते से अपना मेल भेजता हूं। तथ्य यह है कि SSMTP केवल एक खाते का उपयोग करके मेल भेज सकता है मेरे लिए कोई समस्या नहीं है। यह सिर्फ एक होम सर्वर है और जिन उपयोगकर्ताओं के पास क्रोन-जॉब्स जोड़ने की क्षमता नहीं है।

मैं यह जानना चाहूंगा कि स्क्रिप्ट से मेलिंग आमतौर पर लिनक्स / यूनिक्स में सामान्य रूप से और उबंटू में विशेष रूप से कैसे काम करता है। मैं ऊपर की दो स्थितियों में मेल प्राप्त करने के लिए एक अच्छा तरीका जानना चाहूंगा।

जवाबों:


60

डिफ़ॉल्ट रूप से, क्रॉन उस खाते के मालिक को ईमेल करेगा जिसके तहत क्रॉस्टैब चल रहा है।

सिस्टम-वाइड क्रॉस्टैब उपयोगकर्ता के 'रूट' के तहत / etc / crontab में है।

क्योंकि रूट का व्यापक रूप से उपयोग किया जाता है, मैं आपके / etc / aliases फ़ाइल रूट को एक अन्य उपनाम जोड़ने की सलाह दूंगा। (चलाने के बाद 'newaliases')

यह संरचना करने का सामान्य तरीका रूट के लिए सिस्टम पर किसी अन्य उपयोगकर्ता को अलियास किया जाना है, जैसे कि मेरे लिए मैं अपने बाहरी ईमेल पते पर 'phil' (मेरा उपयोगकर्ता खाता) और अन्य उपनाम 'phil' को 'मूल' करूँगा।

यदि आपके पास एक विशिष्ट उपयोगकर्ता क्रोन है जिसे आप आउटपुट पर ईमेल करना चाहते हैं, तो आप उपयोगकर्ता को किसी अन्य ईमेल पते पर पुनर्निर्देशित करने के लिए फिर से / etc / उपनामों का उपयोग कर सकते हैं (आपको सुपरयूज़र एक्सेस प्रदान कर सकते हैं) या आप निम्न का उपयोग कर सकते हैं अपने कौरब के ऊपर:

MAILTO="email@domain.com"

यदि मेल किसी स्थानीय उपयोगकर्ता को भेजा जाना चाहिए, तो आप इसके बजाय सिर्फ उपयोगकर्ता नाम रख सकते हैं:

MAILTO=someuser

यदि आपको अधिक जानकारी की आवश्यकता है तो दौड़ते हुए क्रॉस्टैब (5) देखें:

man 5 crontab

क्या प्रारूप/etc/aliases का अनुसरण करने वाली प्रविष्टियाँ नहीं हैं ? मुझे नहीं पता, शायद प्रारूप पिछले 8 वर्षों में किसी बिंदु पर बदल गया था। name: value1, value2, ...
नाथन जोन्स

1
"मेरे लिए मैं अपने बाहरी ईमेल पते पर 'मूल' (मेरा उपयोगकर्ता खाता) और अन्य उपनाम 'दार' को 'रूट' करूंगा।" बाहरी ईमेल पते में 'दार्शन' को कैसे उतारा जाए?
हावर्ड ली

29

विक्सी क्रोन से भेजे गए ईमेल को प्राप्त करने के लिए आपको कुछ ऐसी चीज की आवश्यकता होगी जो सेंडमेल कमांड को दोहराए। इसलिए पोस्टफिक्स या एसएसएमटीपी स्थापित करने से यह भाग समाप्त हो जाएगा। यदि आपका उपसर्ग उपयोग कर रहा है तो एलियास फाइल का उपयोग सिस्टम उपयोगकर्ताओं को वास्तविक ईमेल पतों पर मैप करने के लिए किया जा सकता है।

CAILAB के शीर्ष पर MAILTO = "foo@bar.com" जोड़ने से क्रोन जॉब से किसी भी आउटपुट को ईमेल किया जाएगा। यह त्रुटि कोड की परवाह किए बिना है।

ऐसी स्क्रिप्ट के लिए जो आउटपुट त्रुटियों को सही ढंग से STDERR में डालती हैं, तब ईमेल को प्राप्त करना आसान होता है, जब वे गलत हो जाते हैं, बस:

MAILTO="foo@bar.com"
0 5 * * * /bin/some_script > /dev/null

यह केवल STDOUT को रिक्त करने के लिए पुनर्निर्देशित करेगा। यदि कोई STDERR संदेश मौजूद है तो वे आपको ईमेल प्राप्त करेंगे।

हालांकि, मैंने पाया है कि कुछ स्क्रिप्ट गलत तरीके से STDOUT के रूप में त्रुटियों को आउटपुट करेंगी और 1. से बाहर निकलें कोड सेट करें। मैंने इनमें से आउटपुट को हथियाने का कोई तरीका नहीं निकाला है, लेकिन अगर बाहर निकलने का कोड 0. है तो आउटपुट को अनदेखा करें। मुझे लगता है कि आउटपुट को किसी फ़ाइल में पुनर्निर्देशित करना है, तो यदि एग्ज़िट कोड 0 आउटपुट नहीं है, तो क्रोन को हथियाने के लिए फ़ाइल। हालांकि बहुत भयानक लगता है।



8

यदि आप सभी आउटपुट (stdout और stderr) को एक विशिष्ट पते पर भेजना चाहते हैं तो आप MAILTOचर का उपयोग कर सकते हैं । उदाहरण के लिए, स्क्रिप्ट के शीर्ष पर निम्नलिखित रखें।

MAILTO="address@example.com"

5

"जड़: your@email.address" को / etc / उपनामों में जोड़ने का प्रयास करें

जो उस उपयोगकर्ता के लिए आपके ईमेल पर सभी संदेश भेजेगा। यदि आप सभी संदेश नहीं चाहते हैं, तो आप इसके लिए विशेष रूप से एक उपयोगकर्ता बना सकते हैं।

जब तक स्क्रिप्ट कुछ आउटपुट करती है, आपको एक मेल मिलेगा।


3

मेरे सभी प्रोडक्शंस सर्वरों पर, जो आम तौर पर रोजाना लगभग 20 क्रोनोजर चलाते हैं, मैं अजगर-क्रोनवैप पैकेज की कसम खाता हूं। यहाँ देखें: http://pypi.python.org/pypi/cronwrap । यह वास्तव में कॉन्फ़िगर करना आसान है और सभी विश्वसनीय हैं।


2

मुझे नहीं लगता कि SSMTP आपको क्या करने की आवश्यकता है, पर निर्भर है। आपको कुछ ऐसी चीज़ों की ज़रूरत है जो क्रोन प्रक्रियाओं से मेल को "प्राप्त" कर सकती हैं और फिर इसे आपके वास्तविक मेलबॉक्स पर भेज सकती हैं।

मैं Sendmail का उपयोग करता हूं, लेकिन ऐसा इसलिए है क्योंकि मैं एक पुराना सन हैंड हूं; मुझे पता है कि इन दिनों सभी शांत बच्चों को हंसी आती है जो पोस्टफिक्स का उपयोग करते हैं। आपका ubuntu समुदाय आपको अपना मेल सिस्टम सेट करने के लिए मार्गदर्शन कर सकता है।


ssmtp लागू / बिन /
प्रेषित

2

एक विकल्प - मैं सभी रूट मेल को कुछ फाइलों में संग्रहीत करता हूं, और फिर मूल मेल को हटा देता हूं।

मैं एक स्क्रिप्ट क्रोन करता हूं (यहां प्रमुख भाग है) -

#!/bin/bash
if `/usr/bin/mail -e`; then
   /usr/bin/mail --print 2>&1 > /tmp/email_${date +"%Y-%m-%d_%H.%M").log
   echo ‘d *’ | /usr/bin/mail -N > /dev/null
fi
exit 0

यह चीजों को चुस्त रखता है और मैं इस पर नजर रख सकता हूं। मैं एक बाहरी ईमेल आईडी आदि के लिए एक दैनिक मेल फ़ाइल ईमेल कर सकता है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.