文档
TKLBAM 钩子
文档页面基于 博客文章( 作者:.
TKLBAM有一个虚无,通用的钩子机制,可以用来触发备份和恢复上的有用动作.
钩子的例子:
- 清理临时文件
- 停止/启动服务,以提高数据一致性
- 非支持数据库的编码/解码数据
- 使用 LVM 创建/ 恢复快速变化音量的快照
钩子机制最初是开发出来的,这样我们就可以解决与TKLBAM的可用性间接相关的几个问题. 尤其是,我们最初的β用户报告说,有时tklbam-restore会找不到任何备份卷. 当我们调查时,发现这与时钟不符。 很明显的解决方法是在恢复之前同步时钟, 但我越是想它, 越是想用硬线来磨擦那些 ntpdate的东西, 使我错觉。 有几个原因:
- 这是一个辅助问题,不是TKLBAM逻辑的核心问题
- 我开发期间大部分时间都离线了 所以我需要一些方法来关闭它, 但我不想增加更多的测试专用代码,除非是绝对必要的。
- 如果默认是一个特定的服务器(如pool.ntp.org),则没问题,但是如果一个用户,例如,想要使用内部的NTP服务器,应该有某种方法来配置它.
我试图想出一个干净的方法 以干净的方式实现这些简单的目标(例如 Cli 选项,环境变量,配置文件), 但我想出的一切是 这么丑陋。
后来我意识到钩子机制可以简单,通用的方式解决这个问题.
执行情况
/etc/tklbam/hooks.d可能包含由tklbam在两个操作(目前)前后运行的可执行文件(如脚本):
- 备份
- 恢复
有两个论点被传递到钩子上:
- 操作: 恢复/备份
- 状态: 前后
非零退出代码提升 HookError.
优点
在一中风中,解决时钟问题,也让高级用户定义自己的钩子来照顾TKLBAM不处理的东西(例如,在IO密集过程停止之前). 备份、编码/解码不支持的数据库等)
示例固定时钟钩
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()欲了解更多信息,请参见本文件附件A。 原始博客文章( E) 利拉兹