दस्तावेज़
TKLBAM हुक
यह दस्तावेज़ पृष्ठ पर आधारित है इस ब्लॉग पोस्ट.
TKLBAM में एक निफ्टी, सामान्य प्रयोजन हुक तंत्र है जिसे आप बैकअप पर उपयोगी कार्यों को ट्रिगर करने और पुनर्स्थापित करने के लिए उपयोग कर सकते हैं।
हुक के उदाहरण:
- अस्थायी फ़ाइलों को सफाई करना
- डेटा स्थिरता बढ़ाने के लिए स्टॉपिंग/स्टार्टिंग सेवाएं
- गैर समर्थित डेटाबेस से डेटा एन्कोडिंग / डिकोडिंग
- LVM का उपयोग करके तेजी से बदलते वॉल्यूम के स्नैपशॉट बनाने / पुनर्स्थापित करने के लिए
हुक तंत्र मूल रूप से विकसित किया गया था ताकि हम कुछ मुद्दों को अप्रत्यक्ष रूप से TKLBAM की उपयोगिता से संबंधित ठीक कर सकें। विशेष रूप से, हमारे पहले बीटा उपयोगकर्ताओं ने बताया कि कभी-कभी tklbam-रीस्टोर किसी भी बैकअप वॉल्यूम को खोजने में विफल हो जाएगा। जब हमने जांच की तो यह एक घड़ी की विसंगति हो गई। स्पष्ट समाधान को बहाल करने से पहले घड़ी को सिंक करना था, लेकिन जितना मैंने इसके बारे में सोचा था कि मैं इसके बारे में अधिक सोच रहा हूं कि वह ntpdate सामान मुझे गलत तरीके से रगड़ गया। कुछ कारणों से:
- यह एक सहायक समस्या है, TKLBAM के तर्क के साथ एक कोर मुद्दा नहीं है
- मैं ऑफ़लाइन हूँ, इसलिए मुझे इस बंद को बदलने के लिए कुछ तरीके की जरूरत थी, लेकिन मैं अधिक परीक्षण-विशिष्ट कोड नहीं जोड़ना चाहता जब तक कि यह बिल्कुल आवश्यक नहीं है।
- यह OK है यदि एक विशिष्ट सर्वर (जैसे, pool.ntp.org) डिफ़ॉल्ट है, लेकिन यह कुछ तरीका है कि यह एक उपयोगकर्ता है, उदाहरण के लिए, एक आंतरिक NTP सर्वर का उपयोग करना चाहता है।
मैं इन सरल लक्ष्यों को स्वच्छ तरीके से प्राप्त करने के लिए एक स्वच्छ तरीके से सोचने की कोशिश करता हूं (उदाहरण के लिए, जलवायु विकल्प, पर्यावरण चर, विन्यास फ़ाइलों) लेकिन मैं जो कुछ भी साथ आया था वह था सिर्फ इतना ही नहीं, बल्कि बहुत ही दुखी है।
फिर मैंने महसूस किया कि एक हुक तंत्र इस समस्या को सरल, सामान्य तरीके से हल करेगा।
कार्यान्वयन
/etc/tklbam/hooks.d में निष्पादन योग्य (जैसे स्क्रिप्ट) हो सकता है जो tklbam द्वारा पहले और बाद में दो ऑपरेशनों (वर्तमान में):
- बैकअप
- बहाल
दो तर्क हुक के पास पारित कर दिए गए हैं:
- ऑपरेशन: बहाल / बैकअप
- राज्य: पूर्व / पद
गैर शून्य निकासकोड एक हुक-एरर उठाते हैं।
लाभ
एक स्ट्रोक में, घड़ी की समस्या को हल करें और उन्नत उपयोगकर्ताओं को चीजों की देखभाल करने के लिए अपने स्वयं के हुक को परिभाषित करने देता है TKLBAM (जैसे, पहले से ही IO गहन प्रक्रियाओं को रोकना) नहीं करता है (उदाहरण के लिए, पहले, IO गहन प्रक्रियाओं को रोकना, INOI) को रोकने के लिए, INOI ने अपने स्वयं के हुक को परिभाषित करने की अनुमति दी है। बैकअप, एन्कोडिंग / कोडिंग अनसहायक डेटाबेस आदि)
उदाहरण के लिए, फिक्सक्लॉक हुक
import os
import sys
import executil
from string import Template
NTPSERVER = os.environ.get("NTPSERVER", "pool.ntp.org")
ERROR_TPL = """\
##########################
## FIXCLOCK HOOK FAILED ##
##########################
Amazon S3 and Duplicity need a UTC synchronized clock so we invoked the
following command::
$COMMAND
Unfortunately, something went wrong...
$ERROR
"""
def fixclock():
command = "ntpdate -u " + NTPSERVER
try:
executil.getoutput(command)
except executil.ExecError, e:
msg = Template(ERROR_TPL).substitute(COMMAND=command,
ERROR=e.output)
print >> sys.stderr, msg,
sys.exit(1)
def main():
op, state = sys.argv[1:]
if op in ('restore', 'backup') and state == 'pre':
fixclock()
if __name__ == "__main__":
main()
अतिरिक्त जानकारी, चर्चा और कमेंट्री के लिए कृपया देखें मूल ब्लॉग पोस्ट लिराज द्वारा।