क्रोन में दोहरे उद्धरण और प्रतिशत संकेत (%) से बच


75

निम्न कमांड प्रॉम्प्ट से काम करता है लेकिन क्रॉस्टेब से नहीं।

 grep abc  /var/log/messages | grep "`date '+%B %d'`" | mail -s"abc log of `hostname`" shantanu.oak+`hostname`@gmail.com

मुझे इसे दैनिक क्रोन में जोड़ने की आवश्यकता है।


आपका उदाहरण आश्चर्यजनक है,% दोहरे, सरल और पीछे उद्धरणों से घिरा हुआ है। कोई उम्मीद नहीं छोड़ते कि बोली भागने से काम चल सकता है।
tuxayo

जवाबों:


125

आपको %संकेतों से बचना होगा । वे crontabs में एक विशेष अर्थ है:

man (5) crontab:

Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command as standard input.

7
+1 बहुत अंतरजनपदीय, मुझे नहीं पता था कि या तो। आश्चर्य है कि मैं इस में भाग नहीं किया है।
काइल स्मिथ

3
खैर मैं बस में चला गया। मैं उपयोग कर रहा था date +%Fऔर कहीं नहीं मिल रहा था
adamo

2
क्या इस वाक्यविन्यास का कोई उपयोगी उपयोग है? साथ SHELL=/bin/bash, मैं हमेशा पुनर्लेखन कर सकते हैं cat %Hello worldके रूप में cat <<<'Hello world'। मुझे विशेष वाक्य-विन्यास की आवश्यकता नहीं दिखती।
विटिको

@Witiko यदि आप "विशेष वाक्य रचना" के बारे में पूछ रहे हैं तो प्रतिशत से बचने के लिए बैकस्लैश है, तो ओपी का अपना प्रश्न एक उदाहरण है जहां इसकी आवश्यकता है: कमांड तर्कों को प्रतिशत की आवश्यकता होती है, विशेष रूप से तिथि कार्यक्रम, जो एक में काफी लोकप्रिय होगा crontab कमांड। यदि आप वास्तव में पूछ रहे हैं कि क्रोन को पहले स्थान पर गच्चा क्यों है: यानी: प्रतिशत के स्थान पर लाइनफीड को प्रतिस्थापित करता है, तो मुझे लगता है कि ऐसा हो सकता है कि आप आपूर्ति कर सकते हैं, एक ही लाइन पर जिसे क्रॉस्टेब की आवश्यकता होती है, एक "कमांड" जिसमें दो होते हैं या अधिक सहायक आदेश।
3

बाद वाला। और, जैसा कि मैंने उल्लेख किया है, कोई भी बैश के साथ ऐसा कर सकता है। क्रोन के सिंटैक्स को लिटाने की आवश्यकता नहीं है।
विटिको

7

यह सीधे आपके प्रश्न का उत्तर नहीं देता है, लेकिन मैं आपको सुझाव दूंगा कि आप / usr / स्थानीय / बिन (या ~ / बिन या जो भी उपयुक्त हो) में एक स्क्रिप्ट फ़ाइल बनाएं और क्रोन से कॉल करें। परीक्षण और संपादन करना आसान है।


2
मेरे अनुभव में, एक क्रॉस्टैब में 50 लाइनों को बनाए रखना बहुत आसान है, जितना कि 50 छोटी फ़ाइलों को बनाए रखना है। आप स्क्रिप्ट को लंबे समय तक स्क्रिप्ट फ़ाइलों में बदलना चाहेंगे, लेकिन एक-लाइनर्स के लिए ऐसा करना एक ओवरकिल हो सकता है।
विटिको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.