सवाल उबंटू में क्रॉन-जॉब्स से (असफल) ई-मेल कैसे प्राप्त करें?


मैं उबंटू में एक में निष्पादन योग्य रखकर क्रॉन-जॉब्स बना देता हूं /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 खाते से भेजता हूं। तथ्य यह है कि एसएसएमटीपी केवल एक खाते का उपयोग कर मेल भेज सकता है मेरे लिए कोई समस्या नहीं है। यह सिर्फ एक होम सर्वर है और मेरे पास उपयोगकर्ताओं के पास क्रॉन-जॉब्स जोड़ने की क्षमता नहीं है।

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


43
2017-08-14 10:01


मूल




जवाब:


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

सिस्टम-व्यापी क्रोंटैब उपयोगकर्ता / रूट के तहत / etc / crontab चलाता है

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

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

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

MAILTO="email@domain.com"

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

MAILTO=someuser

यदि आपको अधिक जानकारी की आवश्यकता है तो क्रॉन्टाब (5) को चलाकर देखें:

man 5 crontab

57
2017-08-14 10:45



नहीं कर रहे हैं /etc/aliases प्रविष्टियों का पालन करना चाहिए प्रारूप  name: value1, value2, ...? मुझे नहीं पता, शायद प्रारूप पिछले 8 वर्षों में किसी बिंदु पर बदल दिया गया था। - Nathan Jones
"मेरे लिए मैं अपने बाहरी ईमेल पते पर 'फिल' (मेरा उपयोगकर्ता खाता) और उपनाम 'फिल' के लिए उपनाम 'रूट' होगा।" बाहरी ईमेल पते पर 'फिल' को कैसे उपनाम करें? - Howard Lee


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

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

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

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

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

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


27
2017-10-27 17:34



प्रयत्न कर सकता habilis.net/cronic - dfrankow
शानदार, धन्यवाद! - Theozaurus


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

MAILTO="address@example.com"

8
2017-08-14 10:18





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

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

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


5
2017-08-14 10:14





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

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


2
2017-08-14 15:47



एसएसएमटीपी उपकरण / बिन / sendmail - bobpaul


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


2
2017-07-29 01:44





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

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

#!/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

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


2
2018-05-27 17:05