जाल: अपनी बैश लिपियों को और अधिक मजबूत बनाएं

राष्ट्रीय नेटवर्क सर्फिंग मैं एक भर में आया था दिलचस्प आलेख (जो मैं यहाँ पर पाठयक्रम में लाता हूँ क्योंकि यह बड़ी सरलता से समझाया गया है) जहाँ इसका लेखक हमें दिखाता है कि कैसे हमारी बैश लिपियों का उपयोग करके अधिक मजबूत बनाया जा सकता है जाल.

जाल के साथ अपनी बैश लिपियों को और अधिक मजबूत बनाएं

कल्पना कीजिए कि आपके पास एक बैश स्क्रिप्ट है जो हर छह घंटे में हर दिन चलती है और किसी समय यह विफल हो जाती है या एक ही स्क्रिप्ट दो बार एक साथ चलती है। ये दो स्थितियाँ काफी असहज होती हैं क्योंकि उन्हें मानवीय हस्तक्षेप को ठीक करने की आवश्यकता होती है या निश्चित समय पर उन्हें संबोधित नहीं किया जा सकता है, सिस्टम को असंगत स्थिति में छोड़ देता है। इसका समाधान, दूसरों के बीच, जाल का उपयोग करना है।

बैश स्क्रिप्ट के आउटपुट को नियंत्रित करने के लिए जाल एक सरल और प्रभावी तरीका है। चलो उसी प्रारंभिक स्थिति में वापस जाते हैं, यदि स्क्रिप्ट मैन्युअल रूप से बंद हो जाती है, उदाहरण के लिए ctrl-c के साथ, यह सिग्नल को वापस करने में बाधित है

INT

और अगर इसके साथ समाप्त होता है

kill

तब आउटपुट होगा

TERM.

सभी संभव निकास कोड के साथ देखा जा सकता है

kill -l

हालांकि सबसे अधिक इस्तेमाल किया जाता है

INT, अवधि, परीक्षा

यदि स्क्रिप्ट में है, उदाहरण के लिए, के साथ फ़ाइलों को सिंक्रनाइज़ करना

rsync

सबसे समझदार बात यह है कि एक लॉक फ़ाइल पर भरोसा करना जो स्क्रिप्ट को एक साथ चलने की अनुमति नहीं देता है:

LOCK = "/ var / run / rsync.lock" यदि [! -य $ LOCK]; तब $ LOCK rsync -avz foo बार rm $ LOCK को स्पर्श करें बाकी गूंज "rsync पहले से ही" फाई चल रहा है

सादे स्पैनिश में, पिछली स्क्रिप्ट जाँचती है कि क्या लॉक फ़ाइल मौजूद है और यदि यह मौजूद नहीं है, तो यह इसे बनाता है और बाद में संबंधित कमांड को निष्पादित करता है, अंत में लॉक फ़ाइल को हटा रहा है। यदि फ़ाइल मौजूद है, तो स्क्रिप्ट केवल उपयोगकर्ता को एक संदेश भेजती है जो यह संकेत देती है कि कमांड पहले से ही चल रहा है।

हालाँकि जब कोई समस्याग्रस्त स्थिति होती है तो ऐसा हो सकता है कि लॉक फ़ाइल को समाप्त नहीं किया जाता है, जिससे अवांछित प्रभाव नष्ट हो जाते हैं। समाधान बहुत सरल है:

LOCK = "/ var / run / rsync.lock" यदि [! -य $ LOCK]; तब जाल "rm -f $ LOCK; बाहर निकलें" INT TERM EXIT स्पर्श $ LOCK rsync -avz foo bar rm $ LOCK जाल - INT TERM EXIT बाकी गूंज "rsync पहले से ही चल रहा है: Fi

इस समाधान की ख़ासियत यह है कि कमांड एक जाल में संलग्न है, ताकि जब एक संकेत प्राप्त हो

INT, अवधि, परीक्षा

स्क्रिप्ट बंद हो जाती है और लॉक फ़ाइल को साफ़ करती है।

यह कहने योग्य है कि लॉक फ़ाइल को सत्यापित करने और इसे बनाने के समय के बीच उपरोक्त स्क्रिप्ट में एक प्रतिस्पर्धा की स्थिति हो सकती है। एक संभव समाधान एक पुनर्निर्देशित और बैश के नोकलोब मोड का उपयोग करना होगा जो किसी मौजूदा फ़ाइल को पुनर्निर्देशित नहीं करता है:

LOCK = "/ var / run / rsync.lock" यदि (सेट-noclobber; गूंज $ $> "$ LOCK") 2> / dev / null; फिर 'rm -f "$ LOCK"; बाहर निकलें $? ' INT TERM EXIT rsync -avz foo bar rm -f $ LOCK ट्रैप - INT TERM EXIT बाकी गूंज "rsync पहले से चल रहा है: $ (कैट $ LCK)" फाई

उत्तरार्द्ध की ख़ासियत यह है कि इसका उपयोग किया जाता है जैसा कि मैंने पहले ही कहा था, नोकलोबार मोड और लॉक फ़ाइल में उस प्रक्रिया का पीआईडी ​​होता है जिसे निष्पादित किया जा रहा है।

यह भी ध्यान देने योग्य है कि अन्य समाधान भी हैं जैसे कि

flock

o

solo

हालाँकि इस पोस्ट में मैं अपने स्वयं के संसाधनों के साथ समाधान साझा करना चाहता था। आप इसके साथ ट्रैप के बारे में थोड़ा और जान सकते हैं उत्कृष्ट मार्गदर्शक.


अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   राफेल कास्त्रो कहा

    प्रतिभाशाली! साझा करने के लिए धन्यवाद।

  2.   nx कहा

    अच्छा लेख, बस 'इको "rsync को बदल दें

    सादर

  3.   Dglangos कहा

    एक बहुत ही रोचक लेख, हाँ सर! यह मैं रखता हूं।

  4.   जोकिन कहा

    यह ध्यान में रखने के लिए एक बहुत ही उपयोगी कमांड है। मैंने इसका उपयोग एक स्क्रिप्ट में किया था जिसे मैंने एक पोस्ट में प्रकाशित किया था, कुछ फ़ाइलों को हटाने के लिए जो स्क्रिप्ट तब बनाई गई जब इसे रोक दिया गया था।

  5.   दानीएफपी कहा

    बहुत दिलचस्प, हाँ सर।