मेरे क्रोनजॉब सिंटैक्स में क्या गलत है, मैं एक बैकटिक (`) का उपयोग करने की कोशिश कर रहा हूं?


31

यहाँ मैं स्वचालित करना चाहता हूँ:

00 08 * * * psql -Uuser database < query.sql | mail somone@null.com -s "query for `date +%Y-%m-%dZ%I:%M`"

यहाँ त्रुटि संदेश है:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

2
इसके अलावा त्रुटि देने के लिए इसे एक स्क्रिप्ट लिपि में रखें। यह क्रॉस्टैब को अनाड़ी होने का दिखावा करेगा और आप अपनी स्क्रिप्ट फ़ाइल में टिप्पणियां और कॉन्फ़िगरेशन जोड़ सकते हैं।
पीटरम

जवाबों:


67

से crontab (5) :

`` छठा 'फ़ील्ड (शेष रेखा) कमांड को चलाने के लिए निर्दिष्ट करता है। लाइन का पूरा कमांड भाग, एक नईलाइन या% वर्ण तक, / बिन / श द्वारा या कोंट्रेब फ़ाइल के शेल चर में निर्दिष्ट शेल द्वारा निष्पादित किया जाएगा। आदेश में प्रतिशत-संकेत (%), जब तक कि बैकस्लैश () के साथ बच नहीं जाते, उन्हें नए वर्णों में बदल दिया जाएगा, और पहले% के बाद के सभी डेटा को मानक इनपुट के रूप में कमांड में भेजा जाएगा। शेल के ट्रेलिंग "\" की तरह एक से अधिक कमांड लाइन को कई लाइनों पर विभाजित करने का कोई तरीका नहीं है।

% संकेतों से पहले बैकस्लैश जोड़ें:

00 08 * * * psql -Uuser database < query.sql | mail somone@null.com -s "query for `date +\%Y-\%m-\%dZ\%I:\%M`"

8

समस्या को हल करने के लिए अपने% वर्णों से बच जाएंdate +%Y-%m-%dहोना चाहिएdate +\%Y-\%m-\%d

दुर्भाग्य से यह उत्तर थोड़ा देर से है, लेकिन मुद्दे PATH या बैकटिक्स नहीं हैं - मुद्दा केवल यह है कि प्रतिशत चरित्र '%' एक विशेष चरित्र है जिसका उपयोग NEWLINE या STDIN को crontab प्रविष्टियों में दर्शाने के लिए किया जाता है

यह dateकमांड के फॉर्मेटिंग इनपुट के साथ टकराव करता है । इस तरह के एक आदेश के रूप में शामिल हैं: के date +%Y-%m-%dरूप में व्याख्या की जाएगी:

date Y- m- d


4

मुझे बैकटिक्स के साथ भी बहुत समस्याएँ थीं। कभी-कभी आपको उद्धरण और बैकटिक्स की एक से अधिक घटनाओं की आवश्यकता होती है। बस उन्हें $ () के लिए बदलें।

उदाहरण:

export NOW=`date`
by
export NOW=$(date)

-गिलसन सोरेस


1
+1 यह वैसे भी आजकल पसंदीदा वाक्य रचना है।
डैन कार्ले

4
लेकिन इसका उपयोगकर्ता के प्रश्न से कोई लेना-देना नहीं है।
एरोन ब्राउन

1
बेशक, इसके बारे में, बैकस्टिक्स के बारे में, प्रश्न को फिर से पढ़ें।
सर्जियो अब्रू

धन्यवाद, मुझे यह महसूस करने में थोड़ी देर लगी कि
बैकटिक्स

-2

इसका बैकस्टिक्स से कोई लेना-देना नहीं है। एक भयानक बात यह है कि क्रोन पाथ को नहीं देखता है, और आपको क्रॉन को बताना चाहिए कि "पेट क्या है?" क्रोन लिपियों में बार-बार।

PATH=/bin:/usr/bin:/usr/sbin
* * * * * /your/script/here

और मैं कमांड को क्रोन लाइन में शाब्दिक रूप से पारित करने के बजाय एक फाइल में कमांड लिखने के पक्ष में हूं। यह बहुत अधिक सुरुचिपूर्ण है

* * * * * /your/script/here

से

* * * * * perl -e '$@#$@$%%@' | grep -e '@#$@$#$@' | sed s/asfdf/asdfa/

ये लाइन एक फ़ाइल, chmod + x फ़ाइल के अंदर जा सकती है, और यह फ़ाइल मंगाई जानी है।

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