使用Shell脚本将DNS运行中的日志进行每天定期保存,并生成zip压缩文件,在DNS服务器上保存最近15天记录的日志,每天的日志都上传到FTP中进行备份。

1、日志获取

DNS日志一般保存在/var/named/data中,将目录中文件进行备份到临时目录中,该目录将进行日志压缩和上传。

#!/bin/bash

#定义文件存放的根路径

path="/var/named"

#创建临时文件

time=`date +%Y%m%d`;

mkdir ${path}/${time}-"log"

\cp -r ${path}/data/* ${path}/${time}-"log"/

2、日志压缩

将临时目录中日志进行压缩,压缩后删除临时目录文件。

Linux下进行压缩需要在DNS服务器上安装“zip”命令,其操作命令如下所示(以CentOS 7为例)。

# yum install zip

安装完成后,可通过“zip --help”命令查看是否安装成功,如果安装成功则可以查看zip压缩命令的帮助信息。

完成安装后将临时目录进行zip压缩。

zip -r ${time}-"log.zip" ${path}/${time}-"log"/
#删除原有的目录文件
rm -rf ${path}/${time}-"log"/

3、上传压缩文件

将zip压缩文件,通过FTP上传到一台FTP服务器进行日志备份,这时Shell脚本需要调用FTP命令,需要在DNS服务器上安装ftp,其操作命令如下所示(以CentOS 7为例)。

# yum install ftp

安装完成后,可通过“ftp ?”命令查看是否安装成功,如果安装成功则进入FTP命令执行操作下。

上传文件,并在FTP上创建当天日期(如年月日)的目录文件,如果存在目录文件,则不需在新创建目录。

#将当天的日志文件进行上传

ftp -n <<- EOF

open FTP服务器IP地址

user User Password

bin

if ![ -f /${time} ] ;then

mkdir /${time}

fi

cd ${time}

put ${time}-"log.zip"

bye

EOF

4、本地保存

将zip压缩文件保存在/var/named/log目录下,并判断该目录下文件的个数是否超过15个,如果超过15个,则删除之前超过15天以外的日志记录文件。

#将文件移到本地文件夹下进行保存

mv ${time}-"log.zip" ${path}/log/

#判断本地LOG日志文件总个数,大于15时自动删除之前的文件

cd ${path}/log/

FileNum=$(ls -l | grep ^- | wc -l)

ReservedNum=15

while(( ${FileNum} > ${ReservedNum} ))

do

    #取最旧的文件,*.*可以改为指定文件类型

    OldFile=$(ls -rt *.* | head -1)

    rm -f ${path}/log/${OldFile}

    let "FileNum--"

done

5、日志清空

删除原本日志记录的所有文件,并新创建相应的日志文件,并赋予相应的权限,以至于可以通过DNS服务继续记录相应的日志。

#清除本地存放日志的初始日志

rm -rf ${path}/data/query/*

touch ${path}/data/query/名称.log

#将新创建的日志文件赋予权限

chown -R named ${path}/data/

chgrp -R named ${path}/data/

6、定时任务

可通过Linux下定时任务从而定期执行Shell脚本,以实现日志每天定时(每天晚上23.59)保存备份,将定时任务写入/etc/crontab文件下,其操作命令如下所示。

# vi /etc/crontab

59     23      *       *       *       root     /bin/bash 脚本存放路径/file.sh