मैं क्रॉन टैब जॉब के अंदर `डेट 'को कैसे निष्पादित कर सकता हूं?


117

मैं एक क्रोन स्क्रिप्ट के लिए एक लॉग फ़ाइल बनाना चाहता हूं जिसमें लॉग फ़ाइल नाम में वर्तमान घंटा है। यह वह कमांड है जिसका मैंने उपयोग करने की कोशिश की है:

0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log

दुर्भाग्य से मुझे यह संदेश मिला जब वह चलता है:

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

मैंने dateविभिन्न तरीकों से भाग निकलने की कोशिश की है, लेकिन बहुत अधिक भाग्य के बिना। क्या यह संभव है कि एक इन-लाइन एक crontab फ़ाइल में हो या मुझे ऐसा करने के लिए शेल स्क्रिप्ट बनाने की आवश्यकता है?

जवाबों:


180

संक्षिप्त जवाब:

इस %रूप में बच \%:

0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+\%d"`.log

लंबा जवाब:

त्रुटि संदेश बताता है कि शेल जो आपकी कमांड को निष्पादित करता है वह दूसरा बैक टिक कैरेक्टर नहीं देखता है:

/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'

जब आप अन्य उत्तरों में से एक का प्रयास करते हैं तो यह आपके द्वारा प्राप्त दूसरी त्रुटि संदेश द्वारा भी पुष्टि की जाती है:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'

Crontab मैनपेज पुष्टि की है कि आदेश केवल पहले नहीं छोड़ा जाएगा अप करने के लिए पढ़ने के लिए है %पर हस्ताक्षर:

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


मेरी अज्ञानता के लिए क्षमा करें, लेकिन आप इस त्रुटि संदेश को कहां देखते हैं? जब मैं 'grep CRON / var / log / syslog' करता हूं, तो मुझे कोई त्रुटि संदेश दिखाई नहीं देता, हालांकि क्रॉन विफल रहा - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01 .png
Tebe

2
@ Копать_Шо_я_нашел क्रोन त्रुटि संदेश के साथ एक ईमेल भेजेगा,
जैसन

3
date +\%Y\ \%m\ \%d\ \%H:\%M:\%S-क्रोनलॉग
डेविलकोड

7

आप अपने कमांड को शेल फ़ाइल में भी डाल सकते हैं और फिर क्रोन के साथ शेल फाइल को निष्पादित कर सकते हैं।

jobs.sh

echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log

क्रॉन

0 * * * * sh jobs.sh

6

यदि आप दिनांक को स्ट्रिंग के रूप में एक चर के रूप में बनाना चाहते हैं (संपूर्ण स्ट्रिंग को डुप्लिकेट करने से बचने के लिए), तो बच न जाएं% और अंदर डालें$()

उदाहरण के लिए, स्ट्रिंग घोषित करते समय, बस लिखें:

DATEVAR=date +%Y%m%d_%H%M%S

फिर, $($VARIABLE_NAME)इस तरह से क्रोन स्टेटमेंट लिखें :

* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log

धन्यवाद करने के लिए cyberx86 , उसकी / उसके जवाब में ServerFault अधिक पूरा किया जा सकता है:


1
DATEVAR = "तिथि +% Y% m% d_% H% M% S"
फ्रैंक फेंग

3

क्रोन में, आप इस सरल वाक्यविन्यास का उपयोग कर सकते हैं:

*/15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +\%Y\%m\%d).log 2>&1

आउटपुट तिथि प्रारूप cron_20180123.log जैसा होगा
bala4rtraining

(१) आप क्या कह रहे हैं जो पहले से ही स्वीकृत उत्तर द्वारा नहीं कहा गया है? (२) आपका उत्तर प्रश्न की तुलना में बहुत अधिक जटिल है। उदाहरण के लिए, आपने -dविकल्प जोड़ा , जिसका उपयोग प्रश्न में नहीं किया गया है (और आपने इसकी व्याख्या नहीं की है)। आप इसे "सरल वाक्यविन्यास" कैसे कह सकते हैं?
जी-मैन

2

उपरोक्त सभी उत्तर दोहरे उद्धरण चिह्नों का उपयोग करते हैं (उन सभी ने मेरे सेटअप के लिए काम नहीं किया)। यह मेरे लिए काम किया:

0 5 * * 3 /data/script.sh > /data/script_`date +\%y\%m\%d`.log 2>&1

1
आप क्या कह रहे हैं जो पहले से ही स्वीकार किए गए उत्तर द्वारा नहीं कहा गया है? क्या आप कह रहे हैं कि यह उद्धरणों के बिना बेहतर उद्धरणों के साथ काम करता है? (संकेत: यह बहुत संभावना नहीं है।)
जी-मैन

स्वीकृत उत्तर केवल मेरे लिए काम नहीं करता है। यह एक करता है।
मैनुअल श्मेट्ज़बर्गर

0

एक मूल समाधान:

  • कमांड $()निष्पादित करने dateऔर आउटपुट वापस करने के लिए उपयोग करें
  • UTC को प्रारूपित करें, के %साथ वर्ण से बाहर निकलें\
  • जोड़ने के 2>&1दोनों स्ट्रीमिंग के लिए अंत में stdoutऔर stderrहै कि लॉग फ़ाइल में

उदाहरण:

* * * * * echo "Test crontab log" > /tmp/crontab.log.$(date --utc +\%Y\%m\%d_\%H\%M\%SZ) 2>&1

आउटपुट:

ls -lh /tmp | grep log

-rw-rw-r-- 1 ubuntu  ubuntu    17 May  4 05:06 crontab.log.20190504_050601Z
-rw-rw-r-- 1 ubuntu  ubuntu    17 May  4 05:07 crontab.log.20190504_050701Z
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.