सभी को अच्छा मूड!
मैंने इस
लेख को यहाँ पढ़ा, और मैंने चेकर्स को खुद से थोड़ा चुनने का फैसला किया और अपने लिए और दूसरों के लिए कुछ सुखद करने की कोशिश की।
मेरी स्क्रिप्ट कोई उपयोगी काम नहीं करती है, लेकिन मुझे लगता है कि कम या ज्यादा शुरुआत लेखकों को कोसने के लिए यह कुछ सिखाएगा, और अगर कोई टिप्पणी है, तो मैं उन लोगों से सीखूंगा जो मेरी गलतियों को इंगित करते हैं।
पृष्ठभूमि
स्क्रिप्ट को डेमॉन द्वारा पृष्ठभूमि में चलाया जाएगा। तुरंत मुझे लगता है कि इस प्रक्रिया से सहमत होना आवश्यक है, जो हर समय मेरी स्मृति में लटका रहेगा, मैं "माता-पिता" को फोन करूंगा। माता-पिता एक विशिष्ट निर्देशिका में एक विशिष्ट फ़ाइल की तलाश करेंगे, और यदि यह मौजूद है, तो फ़ाइल हटा दी जाएगी और एक प्रक्रिया शुरू होगी, जिसे मैं "वंशज" कहूंगा, जिसका उद्देश्य बस थोड़ी देर के लिए सो जाएगा, और फिर पूरा हो जाएगा। लेकिन माता-पिता को प्रति यूनिट एक से अधिक वंशज नहीं चलाना होगा। सिद्धांत रूप में, यदि आप उपरोक्त लेख पढ़ते हैं, तो मुझे लगता है कि अर्थ स्पष्ट है।
से शुरू करें
तो, हम अपने चर को परिभाषित करते हैं
अगला, माता-पिता की शुरुआत और रोक के सुविधाजनक नियंत्रण के लिए, हम एक छोटी सी स्थिति लिखते हैं
case $1 in "start") start ;; "stop") stop ;; *) usage ;; esac exit
रूपरेखा तैयार है, सभी चर भी परिभाषित किए गए हैं, अब हमें उपयोग किए गए कार्यों का वर्णन करने की आवश्यकता है
- start - एक स्टार्ट फंक्शन जो स्क्रिप्ट को डेमॉन मोड में डालता है
- रोक - डेमॉन स्टॉप फ़ंक्शन
- उपयोग - स्क्रीन आउटपुट फ़ंक्शन में मदद करें
- _log - लॉग फ़ाइल में लिखने के लिए फ़ंक्शन
- run_job - वंशज लॉन्च फ़ंक्शन
अब मैं कार्यों का वर्णन करूँगा क्योंकि वे अधिक जटिल हो जाते हैं। उनमें से सबसे सरल उपयोग समारोह है, यह इस तरह दिखता है
जटिलता के लिए आगे _log फ़ंक्शन है
अब डेमॉन स्टॉप फंक्शन
यहां मैं लॉगिंग फ़ंक्शन का उपयोग नहीं करता हूं, जैसा कि यहाँ संदेश कंसोल पर प्रदर्शित होने चाहिए।
अब मैं शायद आपको सबसे जटिल आरंभ समारोह दे दूंगा। इसमें काम के सभी तर्क और स्क्रिप्ट के प्रदर्शन के क्षण शामिल हैं।
खैर, वंशज लॉन्च समारोह ही
ठीक है, अब यदि आप उपरोक्त सभी को एक फ़ाइल में जोड़ते हैं और इसे निष्पादित करने का अधिकार देते हैं, तो मुझे लगता है कि यह आपके लिए मुश्किल नहीं होगा। वैसे, शुरू करने से पहले, मैं आपको सलाह देता हूं कि आप WATCH_DIR चर के मूल्य को उस निर्देशिका के पथ में बदल दें जिसमें स्क्रिप्ट run_Lola_run नामक फ़ाइल की तलाश करेगी।
यहाँ मेरा आउटपुट लॉग फ़ाइल है
parent[32338]: File found parent[32338]: File deleted parent[32338]: Genereated number 96 parent[32338]: Running job with pid 32385 parent[32338]: Jobs in queue [0] child[32338]: Job with pid 32338 child[32338]: Sleep seconds 96 parent[32338]: File found parent[32338]: File deleted parent[32338]: Genereated number 46 parent[32338]: File found parent[32338]: File deleted parent[32338]: Genereated number 1 parent[32338]: Running job with pid 32694 parent[32338]: Jobs in queue [1] child[32338]: Job with pid 32338 child[32338]: Sleep seconds 46 parent[32338]: Running job with pid 371 parent[32338]: Jobs in queue [0] child[32338]: Job with pid 32338 child[32338]: Sleep seconds 1
मुझे उम्मीद है कि यह पोस्ट किसी को मार के विकास में मदद करेगी।
पुनश्च: चौकस पाठक ने देखा होगा कि लॉग में हर जगह एक ही प्रक्रिया संख्या होती है। क्योंकि बैश में कोई शुद्ध कांटा नहीं है, यह यहां होता है, हम कह सकते हैं, आवश्यक कोड को () & में चलाकर अनुकरण, जो इसे एक अलग प्रक्रिया में लॉन्च करता है, लेकिन एक ही समय में चर को अपरिवर्तित रखता है। और हम जानते हैं कि बैश में वर्तमान प्रक्रिया संख्या $ $ चर में संग्रहीत की जाती है। इसलिए, लॉग फ़ाइल में समान प्रक्रिया संख्या प्रदर्शित होती है। इसीलिए start function $ echo $ के साथ समाप्त होता है! > $ {PID_FILE}।