पाइपिंग wget उत्पादन / देव / शून्य से क्रोन में


38

मैं अपने Crontab में हर 5 मिनट में निम्नलिखित कमांड चला रहा हूं ताकि Phusion पैसेंजर को जीवित रखा जा सके।

*/5 * * * * wget mysite.com > /dev/null 2>&1

जब मैं इसे चलाता हूं तो यह साइट url मार्गों STDOUT / STDERR पर / wull / dev / null पर एक wget करता है। जब मैं इसे कमांड लाइन से चलाता हूं तो यह ठीक काम करता है और अपने होम डायरेक्टरी में एक index.html फ़ाइल नहीं बनाता है।

जब यह क्रोन से चलता है, तो यह हर पांच मिनट में एक नई index.html फ़ाइल बनाता है, जो मुझे एक टन इंडेक्स फ़ाइलों के साथ छोड़ देता है जो मुझे नहीं चाहिए।

क्या क्रोन जॉब चलाने के लिए मेरा सिंटैक्स गलत है? कमांड लाइन से यह बिना किसी समस्या के काम करता है, लेकिन क्रोन से यह मेरे होम डायरेक्टरी में एक index.html फ़ाइल बनाता है।

मुझे यकीन है कि मैं एक साधारण गलती कर रहा हूं, अगर कोई भी मदद कर सकता है तो वह इसकी सराहना करेगा।


1
एक और सवाल यह है कि जब आप इसे कमांड लाइन से हाथ से चलाते हैं तो यह फाइल क्यों नहीं बना रहा है। जहां तक ​​मैं प्रलेखन से बता सकता हूं, wgetएक टर्मिनल से चलने के बीच एकमात्र अंतर और अन्यथा यह है कि क्या प्रगति पट्टी प्रदर्शित की जाती है।
बमर

जवाबों:


61

आप इसे इस तरह से कर सकते हैं:

*/5 * * * * wget -O /dev/null -o /dev/null example.com

यहाँ -Oकरने के लिए डाउनलोड की गई फ़ाइल भेजता है /dev/nullऔर -oकरने के लिए लॉग /dev/nullstderr के बजाय। इस तरह पुनर्निर्देशन की बिल्कुल भी जरूरत नहीं है।


1
धन्यवाद, यह STDERR / STDOUT पर पुनर्निर्देशन से अधिक प्रत्यक्ष है। मैं इसकी सराहना करता हूं।
nulltek

17

क्या आपको वास्तव में सामग्री डाउनलोड करने या केवल 200 ओके प्राप्त करने की आवश्यकता है? यदि आपके पास केवल सर्वर प्रक्रिया के लिए अनुरोध है, तो केवल --spiderतर्क का उपयोग क्यों न करें ?


यह एक अच्छी सोच है। मुझे वास्तव में केवल 200 ओके प्रतिक्रिया की आवश्यकता है।
nulltek

मैं उम्मीद कर रहा था कि कोई निष्पक्ष रूप से इसे इंगित करेगा, लेकिन ... आपने किस समाधान का उपयोग करके समाप्त किया? मेरा जवाब वास्तव में ऐसा करने का सही तरीका है :)
नाच -

10

मैं निम्नलिखित का उपयोग करेगा:

/5 * * * * wget -O - mysite.com > /dev/null 2>&1

-O -विकल्प लगता है कि लाई गई सामग्री के लिए stdout भेज रही है।


4
ध्यान दें कि foo > /dev/null 2>&1अधिक संक्षिप्त रूप में लिखा गया है foo &> /dev/null
अमलॉयल

3
@amalloy केवल में bash। में sh, जो आमतौर पर क्रोन का उपयोग करता है, एम्परसेंड पुनर्निर्देशन काम नहीं करता है।
सोवेरियो

5

आप कहते हैं कि आपको केवल एक टिप्पणी में "200 ठीक" प्रतिक्रिया की आवश्यकता है।

कि उन पर कुछ अतिरिक्त लाभ के साथ समाधान के लिए अनुमति देता है
wget -O /dev/null -o /dev/null example.com। यह विचार किसी तरह से आउटपुट को छोड़ना नहीं है, लेकिन किसी भी तरह का आउटपुट नहीं बनाना है।

यह कि आपको केवल प्रतिक्रिया की आवश्यकता है मतलब स्थानीय फ़ाइल index.html में डाउनलोड किया गया डेटा पहले स्थान पर डाउनलोड करने की आवश्यकता नहीं है।
HTTP प्रोटोकॉल में, डॉक्यूमेंट को डाउनलोड करने के लिए 'GET' कमांड का उपयोग किया जाता है । दस्तावेज़ को उस तरीके से एक्सेस करने के लिए जो वास्तव में दस्तावेज़ को डाउनलोड करने के अलावा सब कुछ करता है , एक विशेष कमांड 'HEAD' है।
इस कार्य के लिए 'GET' का उपयोग करते समय, दस्तावेज़ डाउनलोड किया जाता है और स्थानीय रूप से खारिज कर दिया जाता है। Using HEAD ’का उपयोग सिर्फ वही करता है जो आपको चाहिए, यह पहली बार में दस्तावेज़ को स्थानांतरित नहीं करता है। यह परिभाषा के अनुसार 'GET' के समान परिणाम कोड लौटाएगा।

वाक्य रचना विधि का उपयोग करने HEADके साथ wgetएक छोटे से अजीब है: हम विकल्प का उपयोग करने की आवश्यकता है --spider। इस संदर्भ में, यह वही है जो हम चाहते हैं - URL को 'GET' के बजाय 'HEAD' से एक्सेस करें।
हम विकल्प -q(शांत) का उपयोग कर सकते हैं wgetकि यह क्या करता है इसके बारे में विवरण नहीं देता है।

इसे मिलाकर, wgetन तो स्टडर के लिए कुछ भी आउटपुट किया जा सकेगा, और न ही एक दस्तावेज़ को बचाया जा सकेगा।

wget -q --spider 'http://example.com/'

निकास कोड हमें बताता है कि अनुरोध सफल था या नहीं:

$ wget -q --spider 'http://example.com/'
$ echo $?
0
$ wget -q --spider 'http://example.com/nonexisting'
$ echo $?                                          
8

इस आदेश में crontab, इस तथ्य के लिए कि दोनों मामलों में कोई आउटपुट नहीं है, इसका मतलब है कि आप त्रुटियों के संकेत के रूप में फिर से आउटपुट प्राप्त नहीं कर सकते हैं।

आपका उदाहरण कमांड इसे बदल दिया जाएगा:

*/5 * * * * wget -q --spider mysite.com

इसके जैसे ही फायदे हैं wget -O /dev/null -o /dev/null example.com। अतिरिक्त लाभ यह है कि लॉग आउटपुट, और दस्तावेज़ आउटपुट, उत्पन्न नहीं होते हैं और स्थानीय रूप से छोड़ दिए जाते हैं। या बेशक बड़ा अंतर डाउनलोड करने और फिर दस्तावेज़ को छोड़ने से बचने के लिए है index.html


मुझे यह तरीका पसंद है। मैं आपकी प्रतिक्रिया और उत्तर की सराहना करता हूं।
nulltek

3

फ्यूजन पैसेंजर को बचाए रखने के लिए।

आपका सवाल इस बारे में होना चाहिए, वेबपेज कहता है:

एक तेज और मजबूत वेब सर्वर और अनुप्रयोग सर्वर

इसके लिए किसी भी प्रकार की स्क्रिप्ट की आवश्यकता नहीं होनी चाहिए।

अन्यथा कैस्परल्ड का समाधान एकदम सही है।


प्रतिक्रिया के लिए धन्यवाद, हालांकि यह बहुत रचनात्मक नहीं है। एप्लिकेशन सर्वर विफल हो जाते हैं - हालांकि यह आमतौर पर कंटेनर की गलती नहीं है।
फेलिक्स फ्रैंक

1
मैं मानता हूं कि इसे जीवित रखने के लिए किसी भी क्रोनोजर की आवश्यकता नहीं होनी चाहिए। लेकिन जब मैंने Nginx / पैसेंजर ट्यूनिंग पर शोध किया तो यह एक त्वरित समाधान था। वास्तव में सिर्फ / देव / अशक्त करने के लिए सबसे अच्छा तरीका है। मेरे पास एक बार में 2 मिनट के लिए यात्री फेल या लटका हुआ है, जब कोई भार नहीं है, इसलिए url का अनुरोध करने से यात्री को अभी के लिए निकाल दिया गया है।
nultek

1
यह समझना अच्छा होगा कि यह क्या है जो wgetआज्ञाओं द्वारा जीवित रखा जा रहा है । कई स्थितियों में जीवित संदेशों को रखने की आवश्यकता एक अंतर्निहित डिजाइन दोष का एक लक्षण है जिसे ठीक किया जाना चाहिए। लेकिन अगर उन सभी को भी ठीक कर लिया जाए, तब भी कुछ मामले बचे रहेंगे, जहाँ एक जीवित संदेश सही समाधान है। यहां तक ​​कि अगर जीवित संदेशों की आवश्यकता नहीं है, तब भी क्रोन जॉब एक ​​निगरानी सेटअप का एक उपयोगी हिस्सा हो सकता है।
कसपर

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