#/home 目录 handler 脚本# 每个备份文件会通过 FQDN 来鉴别主机getconf backupname# 备份文件的保存目录getconf backupdir# 默认压缩getconf compress# 包含 /home 目录getconf includes#不包含 *.mp3 与 *.mp4 文件getconf excludes# 要打包备份文件的默认扩展名getconf EXTENSION# tar 程序的绝对路径getconf TAR `which tar`# date 程序的绝对路径getconf DATE `which date`# 日期格式DATEFORMAT="%Y-%m-%d"# 如果备份目录不存在,以致命错误退出if[!-d "$backupdir"]thenmkdir -p "$backupdir"|| fatal "Can not make directory $backupdir"fi# 如果备份目录不可写,同样以致命错误退出if[!-w "$backupdir"]thenfatal "Directory $backupdir is not writable"fi# 根据压缩格式选择对应的tar选项case $compress in"gzip")compress_option="-z"EXTENSION="tar.gz";;"bzip")compress_option="-j"EXTENSION="tar.bz2";;"none")compress_option="";;*)warning "Unknown compress filter ($tar_compress)"compress_option=""EXTENSION="tar.gz";;esac# 不包含一些文件类型/目录exclude_options=""for i in $excludesdoexclude_options="$exclude_options --exclude $i"done# 调试信息,执行备份操作debug "Running backup: " $TAR -c -p -v $compress_option $exclude_options -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" $includes# 将标准输出重定向到以.list为扩展的文件 # 将标准错误输出重定向到以.err为扩展的文件$TAR -c -p -v $compress_option $exclude_options -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" $includes >"$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.list 2>"$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.err[ $?-ne 0]&& fatal "Tar backup failed"# 备份操作描述,以下划线分割单词HELPERS="$HELPERS home:backup_of_home_directories"home_wizard(){home_title="Home action wizard"backupname=`hostname --fqdn`# 指定备份操作的时间inputBox "$home_title""When to run this action?""everyday at 01"[ $?=1]&&returnhome_when_run="when = $REPLY"# 指定备份文件名inputBox "$home_title"""Name" of backups""$backupname"[ $?=1]&&returnhome_backupname="backupname = $REPLY"backupname="$REPLY"# 指定保存备份文件的默认路径inputBox "$home_title""Directory where to store the backups""/var/backups/home"[ $?=1]&&returnhome_backupdir="backupdir = $REPLY"# 指定复选框的默认值radioBox "$home_title""Compression" "none""No compression" off "gzip""Compress with gzip" on "bzip""Compress with bzip" off[ $?=1]&&return;result="$REPLY"home_compress="compress = $REPLY "REPLY=while[-z "$REPLY"];doformBegin "$home_title: Includes"formItem "Include:"/home/gacanepaformDisplay[ $?=0]||return1home_includes="includes = "for i in $REPLY;do[-n "$i"]&& home_includes="$home_includes $i"donedoneREPLY=while[-z "$REPLY"];doformBegin "$home_title: Excludes"formItem "Exclude:"*.mp3formItem "Exclude:"*.mp4# 按需增加多个“Exclude”文本框指定其他不须包含的内容formItem "Exclude:"formItem "Exclude:"formDisplay[ $?=0]||return1home_excludes="excludes = "for i in $REPLY;do[-n "$i"]&& home_excludes="$home_excludes $i"donedone# 保存配置get_next_filename $configdirectory/10.homecat > $next_filename <<EOF$home_when_run$home_backupname$home_backupdir$home_compress$home_includes$home_excludes# tar 程序的路径,必须为GNU tarTAR `which tar`DATE `which date`DATEFORMAT "%Y-%m-%d"EXTENSION tarEOF# 将配置文件的权限改为600chmod 600 $next_filename}#ninjahelper选择 create a new backup action(创建一个新的备份操作)。接下来将看到可选的操作类型,这里选择“backup of home directories"(备份home目录):然后会显示在helper中设置的默认值(这里只显示了3个)。可以编辑文本框中的值。注意,关于“when”变量的语法,参考文档的日程安排章节。当完成备份操作的创建后,它会显示在ninjahelper的初始化菜单中:按回车键显示这个备份操作的选项。因为它非常简单,所以我们可以随便对它进行一些实验。注意,“run this action now"(立即运行)选项会不顾日程表安排的时间而立即进行备份操作:备份操作会发生一些错误,debug会提供一些有用的信息以帮助你定位错误并纠正。例如,当备份操作有错误并且没有被纠正,那么当它运行时将会打印出如下所示的错误信息。上面的图片告诉我们,用于完成备份操作的连接没有建立,因为它所需要链接的远程主机似乎宕机了。另外,在helper文件中指定的目标目录不存在。当纠正这些问题后,重新开始备份操作。需要牢记的事情: