欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

日志备份shell脚本,按时间点创建多级目录,每分钟备份一次上一分钟的日志文件

程序员文章站 2022-05-24 12:44:07
...

备注很详细 , 思路很简单 , 欢迎提问

#!/bin/sh

log_src_dir=/home/hadoop/logs/log               #日志文件所在目录
log_backup_dir=/usr/local/log                   #日志文件备份目录
year_mounth=$(date -d "1 minute ago" +%Y%m)     #获取当前时间一分钟前的年月
day=$(date -d "1 minute ago" +%d)               #获取当前时间一分钟前的日
hour_minute=$(date -d "1 minute ago" +%H%M)     #获取当前时间一分钟前的小时分钟
log_file=access.log.*                           #日志文件名格式
:<<! 此判断可以不要
if [ -d "${log_backup_dir}/${year_mounth} " ]   #判断日志文件备份目录的 年月 文件夹是否存在
then
        if [ -d "${log_backup_dir}/${year_mounth}/${day}" ]     #若 年月 文件夹存在判断下级 日 文件夹是否存在
        then
                mkdir -p ${tmp_dir}             #若 日 文件夹不存在,创建全路径目录
        else
                mkdir -p ${tmp_dir}             #若 日 文件夹存在,创建全路径目录
        fi
else
        mkdir -p ${tmp_dir}             #若 年月 文件夹不存在创建全路径目录
fi
!

mkdir -p ${log_backup_dir}/${year_mounth}/${day}/${hour_minute}         #根据当前时间创建日志文件备份目录
cd ${log_src_dir}       #进入日志文件所在目录,对此文件目录下的文件进行遍历,只要符合access.log.*格式的文件
for files in $(ls ${log_file} )
do
        if cp $files ${log_backup_dir}/${year_mounth}/${day}/${hour_minute}     #逐个复制日志文件到指定的日志备份文件夹内
        then
                mv $files "bak."$files          #若复制成功,则给日志文件重命名加上bak.前缀,这样在下一次遍历此文件夹时就不符合access.log.*格式,
                                                #就不会被遍历到,也就不会被再次复制
        fi
done

#使用crontab工具定期执行本脚本
#编辑定时任务 crontab -e
#添加一个定时任务 */1 * * * * /脚本文件所在目录全路径/baklog.sh  每分钟执行一次