Crontab आउटपुट के लिए लॉग में उपयोग करने के लिए आप DATE चर कैसे सेट करते हैं?


10

मैं जैसे तारीख के कुछ रूपों के साथ aroudn खेल रहा था

DATE = $(date)

लेकिन वह काम भी नहीं किया

Crontab -e

CRONLOG=/tmp/log/crontab.log
DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
* * * * * echo $DATEVAR >> /tmp/log/crontab.log
*/2 * * * * echo "$DATEVAR hello" >> ${CRONLOG}
*/1 * * * * echo 'every minute' >> ${CRONLOG}

यह सिर्फ पाठ के रूप में आउटपुट है ...

मैं प्रत्येक अद्यतन पर टाइमस्टैम्प के साथ crontab.log में एक लॉग प्रविष्टि बनाना चाहता हूं

मैं इसे CentOS 6 पर कैसे कर सकता हूं?

अपडेट करें

DATEVAR=date +20%y%m%d_%H%M%S
*/1 * * * * /bin/echo [CRON] $($(DATEVAR)) >> /tmp/log/crontab.log

जब मैंने इसे आज़माया तो केवल [CRON] और कुछ नहीं

जवाबों:


28

क्रोन एक शेल नहीं है - यह उसी तरह से कमांड को पार्स नहीं करता है जिस तरह से शेल करता है। जैसे, आपका वैरिएबल असाइन किया गया है जैसे कि यह स्थिर टेक्स्ट था।

इस समस्या के बारे में मेरे पास तीन समाधान हैं:

विकल्प 1: अपनी कमांड उत्पन्न करने के लिए एक शेल स्क्रिप्ट का उपयोग करें, जो भी चर और तर्क आप चाहते हैं, उसे शामिल करें - और उस शेल स्क्रिप्ट को क्रोन से कॉल करें।

* * * * * /path/to/myscript.sh

myscript.sh:

DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
echo $DATEVAR >> /tmp/crontab.log

विकल्प 2: तिथि कमांड को सीधे अपनी कमांड में शामिल करें, और, चूंकि पूरा कमांड शेल में दिया गया है, इसलिए तारीख को संसाधित किया जाएगा और वास्तविक तिथि के साथ बदल दिया जाएगा।

* * * * * /bin/echo `date +20\%y\%m\%d_\%H\%M\%S` >> /tmp/crontab.log

विकल्प 3: स्ट्रिंग चर को क्रोन में सेट करें, और इसे अपने कमांड में संसाधित करने के लिए पास करें (ध्यान दें - प्रतिशत संकेतों से बचने की आवश्यकता नहीं है, और चर खुद को $ में लपेटा जाता है) () इसे एक अलग शेल में निष्पादित करने के लिए - बैकटिक्स को समान काम करना चाहिए):

DATEVAR=date +20%y%m%d_%H%M%S
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log

(उपरोक्त सभी मामलों में, आप, 'हार्ड कोडिंग' के बजाय, लॉग पथ के लिए एक चर का उपयोग कर सकते हैं।)


1
महान प्रतिक्रिया के लिए धन्यवाद +1, मैंने इसे कॉन्ट्राब में जोड़ने की कोशिश की, लेकिन उस काम को नहीं किया / = यह कभी DATEVAR को प्रस्तुत नहीं करता है
qodeninja

मैंने अभी एक RHEL / CentOS6 संगत प्रणाली पर ऐसा किया था और इसने अपेक्षित परिणाम दिया (यानी तारीख के साथ फाइल में एक नई पंक्ति जोड़ दी)। आपने कौन सा विकल्प (उपरोक्त 3 में से) का प्रयास किया, और इसका परिणाम क्या हुआ - विशिष्ट होना - और क्या इसमें / var / log / cron में कोई त्रुटि थी? (यदि आप स्क्रिप्ट विकल्प का उपयोग करते हैं, तो a) chmod + x और b को न भूलें (इसे अपने दम पर आज़माएं (यानी क्रोन के माध्यम से नहीं))
cyberx86

1
विकल्प 3 =], मैंने पहले भी ऐसा करने की कोशिश की थी, लेकिन उसने रेंडर नहीं किया। लेकिन अब आप कुछ एक lil अंतर किया है देख im। आपने $ ($ (DATE)) को दोगुना क्यों किया? ऊपर मेरा अपडेट देखें
qodeninja

1
आपके द्वारा जोड़े गए अपडेट में आपके पास एक टाइपो है - यह $($DATEVAR)नहीं है $($(DATEVAR))। इसे इस तरह से सोचें - $()- अर्थात्, बाहरी ब्रैकेट - जो कुछ भी ब्रैकेट में है, उसे प्रोसेस करने के लिए एक नया शेल लॉन्च करता है। इस स्थिति में, चर $ DATEVAR को एक स्ट्रिंग पर सेट किया जाता है और इसे शेल में पास किया जाता है। $(DATEVAR)कुछ भी नहीं है - क्योंकि DATEVARकुछ भी नहीं है (यानी यह एक चर के रूप में पहचान करने के लिए $ गायब है)। आप $DATEVARउसी परिणाम को प्राप्त करने के लिए
बैकटिक्स का

काफी उचित। इसे अद्यतन किया। इस बुरे लड़के की कोशिश करो! - हज़ाह! इसने काम किया
qodeninja
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.