使用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