Crontab अधिकतम कमांड लंबाई


20

क्या वर्णों की एक सीमा एक क्रैस्टब में एक कमांड हो सकती है?

मेरे पास 178 वर्णों वाली एक कमांड है और इसे निष्पादित होने पर 164 पर काट दिया जाता है। इस नंबर को मैं ई-मेल से प्राप्त कर सकता हूं और उस बिंदु से बदल रहे vi रंगों से।

तो, क्या यह एक "आधिकारिक" सीमा है? मुझे इस बारे में कोई दस्तावेज नहीं मिल रहा है।


हम्म, अगर इसकी लंबाई सीमा होती तो मुझे संदेह है कि यह उतना ही कम होगा जितना आप देख रहे हैं। सर्वरफॉल्ट.com/questions/ 449651/… के माध्यम से अपने तरीके से काम करते हुए यह आपके लायक होगा और फिर यदि यह आपके प्रश्न को आपके वास्तविक (उपयुक्त रूप से पुन: सक्रिय) क्रॉस्टैब प्रविष्टि के साथ अपडेट करने में मदद नहीं करता है।
user9517

आप सही थे, लंबाई समस्या नहीं थी। मेरा जवाब देखिए। लिंक के लिए धन्यवाद।
पोनीटेक

जवाबों:


36

वाह, मैंने पाया कि मेरी समस्या क्या है और इसका रेखा की लंबाई से कोई लेना-देना नहीं था।

यह पता चला है कि मेरे आदेश में एक% (प्रतिशत चिह्न) था, जिसका क्रेसटैब में एक विशेष अर्थ है। इसका उपयोग STDIN पर पाठ को इनपुट करने के लिए किया जाता है (देखें कि मेरा क्रैस्टब काम क्यों नहीं कर रहा है, और मैं इसे कैसे समस्या निवारण कर सकता हूं? )।

इसलिए मुझे इससे बचना पड़ा। मेरी आज्ञा जो थी:

gzip -c /path/to/a/file > /backup/dir/file-$(date +%F_%T).gz

हो जाता है

gzip -c /path/to/a/file > /backup/dir/file-$(date +\%F_\%T).gz

नहीं होगा ... दिनांक '+% F_% T' पर्याप्त है?
जिरिब

मैं अनुमान लगा रहा हूं कि वह उस न्यूलाइन चरित्र को समाप्त करने के लिए प्रतिध्वनि कर रहा है, जो कि उसके आउटपुट के अंत में डालती है
एड।

2
मैं सोच रहा था कि विम और सिंटैक्स हाइलाइटिंग के साथ क्रॉस्टैब को संपादित करना मेरे आदेश को थोड़ा रंगीन क्यों बनाता है। %एक दो घंटे की कमी का कारण!
geerlingguy

12

Experientially , वहाँ मेरी Ubuntu मशीनों के सभी पर प्रत्येक पंक्ति में एक 999 चरित्र काट-छांट है, हालांकि मैं अभी तक किसी भी संबंधित व्याख्यात्मक प्रलेखन नहीं मिली है।

मैंने उबंटू 10.04, 12.04 और 14.04 पर परीक्षण किया है, और 999 वर्ण गणना पहले गैर-व्हाट्सएप चरित्र पर शेड्यूल से पहले शुरू की गई है (मेरे उदाहरण में शेड्यूल है * * * * *, जो हर मिनट 1 बार के बराबर है)।

का निरीक्षण करें:

  • पहले हम उस कमांड के वर्णों को गिनते हैं जिसे हम अपने क्रॉस्टैब में जोड़ रहे हैं - शेड्यूल के बिना :

    davidamick@myputer:~$ echo -n "/bin/echo 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' > /tmp/test.log" | wc -c
    999
    davidamick@myputer:~$
    
  • उस कमांड को हमारे कॉन्टैब में जोड़ें, हर मिनट चलाने के लिए: (WARN यह संबंधित उपयोगकर्ता के लिए किसी भी मौजूदा क्रॉस्टैब प्रविष्टियों को ओवरराइट करता है)

    davidamick@myputer:~$ echo "* * * * * /bin/echo 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' > /tmp/test.log" | crontab -
    davidamick@myputer:~$
    
  • एक मिनट तक प्रतीक्षा करें, जांचें कि एक /tmp/test.logफ़ाइल आपके सभी "s" से बनी है:

    davidamick@myputer:~$ cat /tmp/test.log
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    davidamick@myputer:~$
    
  • नए सिरे से शुरुआत करें, कॉन्टैब और लॉग फ़ाइल निकालें:

    davidamick@myputer:~$ crontab -r
    davidamick@myputer:~$ rm /tmp/test.log
    davidamick@myputer:~$
    
  • पहले की तरह ही कमांड जोड़ें, केवल 1 वर्ण लंबा, (मेरे मामले में, B):

    davidamick@myputer:~$ echo "* * * * * /bin/echo 'Baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' > /tmp/test.log" | crontab -
    davidamick@myputer:~$
    
  • एक और मिनट प्रतीक्षा करें, पता करें कि नाम वाली फ़ाइल /tmp/test.loआपके "ए" के साथ बनाई गई थी। ऐसा इसलिए है क्योंकि 1000 वें वर्ण को काट दिया गया था।
  • पुष्टि करने के लिए, जोड़े को हटा दें Bऔर इसके बजाय 1फ़ाइल नाम में जोड़ें , जैसे:

    davidamick@myputer:~$ echo "* * * * * /bin/echo 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' > /tmp/test1.log" | crontab -
    
  • एक और मिनट प्रतीक्षा करें, एक फ़ाइल का नाम नोट करें जो /tmp/test1.loआपके "ए" के साथ बनाई गई है।
  • बोनस सबूत के लिए, से एक सिमलिंक बनाने /bin/echoके लिए /usr/bin/echoकरते हैं और पाते हैं कि आप अपने आदेश से एक अतिरिक्त 4 अक्षर को दूर करना होगा।

3
मैंने सिर्फ यह सत्यापित किया है, यह सच है। cronमेरे Ubuntu पर 14.04 चुपचाप कमांड को 999 वर्णों तक काटता है। यह बहुत पागल है, मुझे इसे पचाने में थोड़ा समय लगा। और यह इंटरनेट पर एकमात्र दस्तावेज है जो इसे 1 अपवोट के साथ दस्तावेज करता है।
nh2

कल्पना कीजिए कि आपके पास एक कमान है ... && stop-power-plant; start-power-plantऔर क्रोन बस चुपचाप चॉप करता है; start-power-plant
nh2

1
लगभग 30 वर्षों के बाद (क्रोन कम से कम 1988 से है), कुछ उज्ज्वल आत्मा ने इसे एक त्रुटि बना दिया: github.com/systemd-cron/crontab/commit/…
nh2

1
: डेबियन की तरह दिखता है इस के लिए एक बग रिपोर्ट था bugs.debian.org/cgi-bin/bugreport.cgi?bug=686223
NH2

यदि आप भाग्यशाली हैं, तो ट्रंकेशन एक उद्धरण के अंदर होता है और आपको मिलता है /bin/sh: 1: Syntax error: Unterminated quoted string, लेकिन ऐसा कुछ भी नहीं है जो इसकी गारंटी देता हो।
nh2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.