आर्क पर, त्रुटि पर `क्रोन` नौकरी और मेल्टो सेट करें


0

मैं अपने मालिकों को त्रुटि / चेतावनी के मामले में ईमेल भेजने के postfixलिए cronनौकरियों के लिए एक वाणिज्यिक smtp सर्वर से जुड़ा हुआ हूं । यह एक बॉक्स आर्क सेटअप है।

postfixकाम करता है। तो करता है cronie। लेकिन हालांकि सभी क्रोन नौकरियों में सबसे सरल है आग, मुझे हर निष्पादन में क्रोन डेमॉन से एक ईमेल मिलता है, जिसमें लिखा है:

/ बिन / श: चेतावनी: कमांड प्रतिस्थापन: इनपुट में अशक्त बाइट को नजरअंदाज कर दिया।

परीक्षण के रूप में हर मिनट चलाया जाने वाला क्रोन नियम है:

MAILTO=MYUSERNAME@LOCALHOSTNAME

* * * * * eval "export $(grep -Ez DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";/home/USERNAME/test

और निष्पादन योग्य ~ / परीक्षण मूल रूप से है:

#!/bin/bash
/usr/bin/notify-send 'Hello world!' --icon=dialog-information

मैं समझता हूं कि grep -Ez [...]एक अशक्त बाइट का परिचय होता है, जैसा कि इसके आउटपुट द्वारा कुछ असामान्य पात्रों के साथ आवश्यक किया जाता है।

मेरा खिलौना उदाहरण ठीक से काम करेगा, अगर यह उस विशिष्ट चेतावनी के लिए नहीं था जो हर निष्पादन में USERNAME को ईमेल किया जाता है। मैं उससे कैसे छुटकारा पाऊं?

जवाबों:


1

इसके \0साथ बदलें \n:

eval "export $(tr -s \\0 \\n </proc/$(pgrep -u $LOGNAME -x gnome-session)/environ|grep DBUS_SESSION_BUS_ADDRESS)";/usr/bin/notify-send 'Hello world!'

अच्छा विचार IporSircer लेकिन यहां तक ​​कि "gnome-session" की तरह कुछ के साथ "icewm" की जगह उत्पादन मेरा बहुत करीब है लेकिन लाइन की शुरुआत में एक "D" चरित्र के साथ। मैं अपने पोस्ट किए गए समाधान का पक्ष लेना चाहूंगा क्योंकि इसमें आपकी कमी है pipe, लेकिन यह कोई बड़ी बात नहीं है।
Cbhihe

यह एक गलती थी, अद्यतन।
इपोर सिरकार

.... "-एक्स".... ?
Cbhihe

1

कुछ शोध के बाद .... यह पता चला है कि grep -Ez [...]क्रोन जॉब में ऐसा करने का सही तरीका नहीं है।

/proc/[pid]/environ लिनक्स ओएस में क्विक है कि अशक्त बाइट रिकॉर्ड विभाजक है, ताकि इसकी सामग्री जब stdout के लिए आउटपुट "एक एकल पंक्ति की तरह" दिखता है, अर्थात बिना ईओएल चरित्र के साथ:

$ cat -v /proc/$(pgrep -u $LOGNAME gnome-session)/environ
LC_MEASUREMENT=en_IE.UTF-8^@LC_PAPER=en_IE.UTF-8^@LC_MONETARY=en_IE.UTF-8^@LANG=en_US.UTF-8^@GDM_LANG=en_US.UTF-8^@DISPLAY=:1^@USERNAME=USERNAME^@MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins^@XDG_VTNR=2^@XDG_SESSION_ID=2^@USER=USERNAME^@DESKTOP_SESSION=gnome^@PWD=/home/USERNAME^@HOME=/home/USERNAME^@XDG_SESSION_TYPE=x11^@XDG_SESSION_DESKTOP=gnome^@LC_NUMERIC=en_IE.UTF-8^@MAIL=/var/spool/mail/USERNAME^@WINDOWPATH=2^@SHELL=/bin/bash^@XDG_CURRENT_DESKTOP=GNOME^@XDG_SEAT=seat0^@SHLVL=0^@GDMSESSION=gnome^@LOGNAME=USERNAME^@DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus^@XDG_RUNTIME_DIR=/run/user/1000^@XAUTHORITY=/run/user/1000/gdm/Xauthority^@PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl^@LC_TIME=en_IE.UTF-8^@

उपरोक्त में, मैंने झंडे के catसाथ -vनुल बाइट्स को प्रकट करने के लिए उपयोग किया ।

तो समाधान यह है कि "DBUS_SESSION_BUS_ADDRESS"नल बाइट्स को पहचानते समय पैटर्न की तलाश करें । awkऔर gawkदोनों करते हैं कि हालांकि यह पोर्टेबल नहीं है , रिकॉर्ड विभाजक को nul बाइट के लिए हेक्साडेसिमल कोड में बदलकर:\x00

$ awk -F 'BEGIN {RS="\x00"} /DBUS_SESSION_BUS_ADDRESS/' /proc/$(pgrep -u $LOGNAME gnome-session)/environ
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

यह वास्तव में बिना नग बाइट्स के साथ एक साफ उत्पादन का उत्पादन करता है और इसे अच्छी तरह से पसंद किया जाता है cron। कोई चेतावनी नहीं दी जाती है और कोई ईमेल नहीं भेजा जाता है।


1
जैसे ही आपका सिस्टम "यूजर बस" शैली का उपयोग करता है / run / tmp में एक यादृच्छिक सत्र बस पते के बजाय, यह पूरा greppage अब वैकल्पिक है और आप बस पते को सुरक्षित रूप से हार्डकोड कर सकते हैं। (या यहां तक ​​कि हाल ही में लिबडबस पर भरोसा करें, जब पर्यावरण चर गायब है तो पहले से ही इसे डिफ़ॉल्ट के रूप में कोडित किया गया है।)
grawity

@grawity: मुझे पूरी तरह से पता नहीं था। क्या आप इस आशय का सरल उत्तर लिखना चाहेंगे, इसलिए अन्य लोग वास्तव में आपकी टिप्पणी को याद नहीं कर सकते। बस ध्यान रखें कि मैं लिनक्स सिस्टम में पोर्टेबिलिटी की तलाश कर रहा था, कुछ मेरा जवाब काफी तीखा नहीं है .... टीएक्स।
Cbhihe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.