क्रोन में पात्रों को बचाना


9

निम्नलिखित कमांड प्रॉम्प्ट से अपेक्षा के अनुसार काम करता है। लेकिन यह क्रोन से काम नहीं करता है।

mysqldumpslow <(tail -1000 `mysqladmin variables \
    | grep slow_query_log_file | awk '{print $4}'`) \
    | mail -s "slow log from `hostname` sorted by time" shantanu.oak`hostname`@gmail.com \
    > /root/slow_succ.txt 2> /root/slow_err.txt

मुझे निम्नलिखित त्रुटि मिलती है:

/bin/sh: -c: line 0: syntax error near unexpected token `('

क्या कुछ पात्रों को क्रोन में भाग जाने की आवश्यकता है? या यह क्रॉन में subshell के साथ कोई समस्या है?


का डुप्लीकेट serverfault.com/questions/274475/... ?
13

जवाबों:


13

मैं इस बात पर विस्तार करूंगा कि स्वेन ने यह कहकर कि मैं इस आदेश को दो कारणों से स्क्रिप्ट में डालूंगा:

  1. यह crontab में पात्रों से बचने के साथ किसी भी मुद्दे से बचा जाता है।
  2. यह आपको अपने साथी प्रशासकों को स्पष्ट रूप से इंगित करने की अनुमति देता है कि आपके द्वारा बनाए गए एक-लाइनर जादू को डिक्रिप्ट किए बिना किसी भी चक्र को बर्बाद किए बिना काम क्या करता है। जैसे कि स्क्रिप्ट बुलाना /root/bin/dump_mysql_tables_and_email_failure_report.sh। आप अन्य व्यवस्थापकों के साथ एक वातावरण में नहीं हो सकते हैं, लेकिन यह आपको याद दिलाने के लिए काम करेगा कि अब आप एक साल से क्या सोच रहे थे! :)

2
के लिए कुडोस "क्या हो तुम अब से एक साल में सोच रहे थे!"।
टॉन्नी

5

क्रोन भागने की समस्याओं के लिए सबसे आसान उपाय: कमांड को इसकी अपनी शेल स्क्रिप्ट में रखें और इस स्क्रिप्ट को क्रोन से कॉल करें।


5

कारण यह काम करता है नहीं है cronनहीं है bash। कोष्ठक का उपयोग कर एक उपधारा बनाना बैश सिंटैक्स का हिस्सा है। इस बात का सुराग त्रुटि संदेश के पहले "शब्द" में है।

Backticks एक सबस्लेम बनाने के लिए काम करेगा सिवाय इसके कि आप पहले से ही अपने सब्सक्रिप्शन के अंदर backticks का उपयोग कर रहे हैं ताकि आप उन का फिर से उपयोग न कर सकें।

जैसा कि दूसरों ने पहले ही कहा है, एक स्क्रिप्ट लिखें और क्रोन से कॉल करें।

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