定时任务+脚本实现保留最新的N天数据

344 阅读2分钟

前言

在业务上线之后,往往都需要对数据进行备份,在资源有限时不一定要保留最新90天的数据(日志);可以写脚本实现保留最新N天的数据备份文件。

背景说明

统一源代码GitLab仓库默认保留最新的一周的备份数据(压缩包);由于公司项目增多,数据量迅速增加,1MB的代码是需要 * 8的磁盘空间,导致原先准备的1.5T磁盘被占满; 另在已经申请备份软件进行磁盘备份后,使用定时任务+脚本 的方式可实现保留最新N天的数据

windows服务器

window操作系统提供了定时任务,这里不过多描述(一般一直下一步即可) 批处理脚本如下所示

@echo off
REM ------------------------------------------------------------------------------
REM 功能:定期删除数据库备份文件
REM 设置DayAgo参数来保留最近多少天的备份
REM ------------------------------------------------------------------------------
REM ------------------------------------------------------------------------------
REM 如果显示的待删除文件列表正确无误
REM 把 Select-Object FullName 修改成 Remove-Item -Force 再次执行即可真正删除文件
REM Win7/Win8/Win10等系统自带PowerShell
REM ------------------------------------------------------------------------------
REM schedule_jobs是日志的存放路径
set Dir=G:\schedule_jobs
REM 指定待删除文件的存放路径
set SrcDir=D:\test
REM 指定天数(不包括当天)
set DaysAgo=7


echo =================================begin to delete backup===============================>>%Dir%\del_backup.log
powershell -c "Get-ChildItem -Path '%SrcDir%' -Recurse -ErrorAction:SilentlyContinue | Where-Object -FilterScript {(((get-date) - ($_.LastWriteTime)).days -gt %DaysAgo% -and $_.PsISContainer -ne $True)} | Select-Object FullName">>%Dir%\del_backup.log


powershell -c "Get-ChildItem -Path '%SrcDir%' -Recurse -ErrorAction:SilentlyContinue | Where-Object -FilterScript {(((get-date) - ($_.LastWriteTime)).days -gt %DaysAgo% -and $_.PsISContainer -ne $True)} | Remove-Item -Force"


echo =====================================delete completed......===========================>>%Dir%\del_backup.log
rem pause

linux 服务器

centos 默认自带crontab,使用以下命令可以使用启动服务

/bin/systemctl restart crond.service

shell脚本stay3files.sh

#!bin/bash
cd /home/username/dest_path
ls -t *.zip | tail -n +4 | xargs rm -f    ###保留最新3天的数据

执行 crontab -e 键入

0 1 * * * /path/./stay3files.sh  ##每天凌晨1点执行stay3files.sh

执行 crontab -l 查看定时任务