跳到正文
TURNKEYGNU / LINUX
应用文档博客截图GitHubTurnKey Hub
文中文
EnglishEspañol中文日本語PortuguêsDeutsch
ưμ㼯A/TKLBAM 钩子

文档

TKLBAM 钩子

文档页面基于 博客文章( 作者:.

TKLBAM有一个虚无,通用的钩子机制,可以用来触发备份和恢复上的有用动作.

钩子的例子:

  • 清理临时文件
  • 停止/启动服务,以提高数据一致性
  • 非支持数据库的编码/解码数据
  • 使用 LVM 创建/ 恢复快速变化音量的快照

钩子机制最初是开发出来的,这样我们就可以解决与TKLBAM的可用性间接相关的几个问题. 尤其是,我们最初的β用户报告说,有时tklbam-restore会找不到任何备份卷. 当我们调查时,发现这与时钟不符。 很明显的解决方法是在恢复之前同步时钟, 但我越是想它, 越是想用硬线来磨擦那些 ntpdate的东西, 使我错觉。 有几个原因:

  • 这是一个辅助问题,不是TKLBAM逻辑的核心问题
  • 我开发期间大部分时间都离线了 所以我需要一些方法来关闭它, 但我不想增加更多的测试专用代码,除非是绝对必要的。
  • 如果默认是一个特定的服务器(如pool.ntp.org),则没问题,但是如果一个用户,例如,想要使用内部的NTP服务器,应该有某种方法来配置它.

我试图想出一个干净的方法 以干净的方式实现这些简单的目标(例如 Cli 选项,环境变量,配置文件), 但我想出的一切是 这么丑陋。

后来我意识到钩子机制可以简单,通用的方式解决这个问题.

执行情况

/etc/tklbam/hooks.d可能包含由tklbam在两个操作(目前)前后运行的可执行文件(如脚本):

  1. 备份
  2. 恢复

有两个论点被传递到钩子上:

  1. 操作: 恢复/备份
  2. 状态: 前后

非零退出代码提升 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) 利拉兹

TURNKEYGNU / LINUX

无需从零开始,掌控自己的基础设施。

探索 TurnKey
关于文档常见问题博客GitHub
自由开源默认安全随时可部署