当前位置: 首页 > web >正文

【ubuntu下小工具】Crontab定时任务进行数据备份和清理

背景

在生产环境的深度学习项目中,系统每日会持续生成大量数据。如果不进行有效管理,随着时间的推移,磁盘空间将被占满,最终导致服务器瘫痪。 为解决这一问题,需设置一个定时任务去执行脚本,用以完成:

  1. 按日归档数据:将每日生成的数据存入以日期命名的独立文件夹中。
  2. 定期清理历史数据:仅保留最近 n 天的数据文件夹,自动删除更早的历史数据,确保磁盘空间合理利用。

该方案通过定时任务实现,既能保证数据的阶段性存储,又能避免因磁盘写满引发的服务中断。

1. 执行文件的编写

  1. DATASET文件夹,移动到DATASET_BACKUP路径下,并重新创建 DATASET文件夹,用以后续的数据存放。
  2. DATASET_BACKUP 路径下的归档数据,保留最近 n 个数据文件夹,其余均删除。
    在这里插入图片描述
#!/bin/bash# 配置部分SOURCE_DIR="/home/ll/crontab_task/testdata/DATASET"         # 需要归档数据
BACKUP_DIR="/home/ll/crontab_task/testdata/DATASET_BACKUP"  # 归档路劲
LOGS_DIR="/home/ll/crontab_task/testdata/image_backup.log"  # 归档日志DEFAULT_KEEP_COUNT=5  # 默认保留最近的5个备份# 检查源目录
if [ ! -d "$SOURCE_DIR" ]; thenecho "$(date '+%Y-%m-%d %H:%M:%S') - 源目录 $SOURCE_DIR 不存在,跳过备份" >> $LOGS_DIRexit 0
fi# 从SOURCE_DIR提取最后一级目录名
BASE_NAME=$(basename "$SOURCE_DIR")# 获取原始权限信息
ORIG_OWNER=$(stat -c "%U:%G" "$SOURCE_DIR")
ORIG_PERM=$(stat -c "%a" "$SOURCE_DIR")# mv操作
DATETIME=$(date +"%Y%m%d_%H%M")
mkdir -p "$BACKUP_DIR"
mv "$SOURCE_DIR" "${BACKUP_DIR}/${BASE_NAME}_${DATETIME}" || {echo "$(date '+%Y-%m-%d %H:%M:%S') - 备份失败!目录可能被锁定或磁盘已满" >> "$LOGS_DIR"exit 1
}# 重建目录并恢复权限
mkdir -p "$SOURCE_DIR"
chown "$ORIG_OWNER" "$SOURCE_DIR"
chmod "$ORIG_PERM" "$SOURCE_DIR"
echo "$(date '+%Y-%m-%d %H:%M:%S') - 已重建目录并恢复权限: $ORIG_OWNER $ORIG_PERM" >> "$LOGS_DIR"# 删除旧备份(保留最近的KEEP_COUNT个)
KEEP_COUNT=${1:-$DEFAULT_KEEP_COUNT}
BACKUP_FILES=($(ls -dt "${BACKUP_DIR}/${BASE_NAME}_"* 2>/dev/null))
TOTAL_COUNT=${#BACKUP_FILES[@]}if [ $TOTAL_COUNT -gt $KEEP_COUNT ]; thenfor (( i=KEEP_COUNT; i<TOTAL_COUNT; i++ )); dorm -rf "${BACKUP_FILES[$i]}"doneecho "$(date '+%Y-%m-%d %H:%M:%S') - 保留最近 ${KEEP_COUNT} 个备份,删除 $((TOTAL_COUNT - KEEP_COUNT)) 个旧备份" >> "$LOGS_DIR"
fi

OK,脚本实现了后。我们需要设置和开启定时任务。

2 Crontab 定时任务的设置

  1. 打开终端运行
    crontab -e
    
  2. 然后添加内容
    * * * * * /home/ll/crontab_task/images_data_backup.sh   # 每分钟备份一次
    # 0 2 * * * /home/ll/crontab_task/images_data_backup.sh   # 每天2点0分执行sh文件
    
  3. 查看当前用户的定时任务
    crontab -l
    

以上设置,定时任务已经设置成功,并在指定时间执行。

3 Crontab 详细介绍

这里做个记录,方便自己快速查阅。如果有更多的需求和疑问,直接deepseek一下,会得到更为详细的答案。

crontabCron Table)是 Linux/Unix 系统中的一个 定时任务管理工具,允许用户按预定义的时间周期自动执行命令或脚本。它由 cron 守护进程(crond)驱动,广泛用于自动化运维、日志清理、数据备份等场景。


2.1 Crontab 基本结构

一个 crontab 条目由 时间表达式 + 要执行的命令 组成,格式如下:

* * * * * <command-to-execute>
│ │ │ │ │
│ │ │ │ └─── 星期几 (0-7, 0和7都代表周日)
│ │ │ └───── 月份 (1-12)
│ │ └─────── 日期 (1-31)
│ └───────── 小时 (0-23)
└─────────── 分钟 (0-59)

示例:

*/5 * * * * /path/to/script.sh  # 每5分钟执行一次脚本
30 3 * * * /backup.sh          # 每天凌晨3:30执行备份
0 0 1 * * /clean-logs.sh       # 每月1日0:00清理日志

2.2 Crontab 时间表达式详解

  • (1)基本时间字段

    字段取值范围说明
    分钟0-59每小时的第几分钟执行
    小时0-23每天的第几小时执行
    日期1-31每月的第几天执行
    月份1-12每年的第几月执行
    星期0-7每周的第几天执行(0和7=周日)
  • (2)特殊符号

    符号示例说明
    ** * * * *匹配所有可能值(每分钟执行)
    ,0,15,30 * * * *指定多个时间点(每小时的0,15,30分执行)
    -0 9-18 * * *时间范围(每天9点到18点整点执行)
    */n*/5 * * * *每隔n单位执行一次(每5分钟执行)
  • (3)常见示例

    表达式说明
    0 * * * *每小时的第0分钟(整点)执行
    */10 * * * *每10分钟执行一次
    0 2 * * *每天凌晨2点执行
    0 0 * * 0每周日0点执行
    0 0 1 * *每月1日0点执行

3. Crontab 基本操作

  1. 查看当前用户的定时任务

    crontab -l
    
  2. 编辑定时任务

    crontab -e  # 使用默认编辑器(如vi)修改
    
  3. 删除所有定时任务

    crontab -r
    
  4. 指定用户管理(需root权限)

    crontab -u username -e  # 编辑其他用户的crontab
    

4. Crontab 注意事项

在设置定时任务时候,无论脚本还是Crontab 中的执行脚本,都需要是绝对路径。

http://www.xdnf.cn/news/14670.html

相关文章:

  • 【AGI】突破感知-决策边界:VLA-具身智能2.0
  • 格兰泰勒棱镜透射光强曲线优化处理
  • 嵌入式开发之嵌入式系统架构如何搭建?
  • Java ArrayList集合和HashSet集合详解
  • day38 打卡
  • 基于Python、tkinter、sqlite3 和matplotlib的校园书店管理系统
  • 多线程八股
  • Shell脚本中和||语法解析
  • tkinter Text 组件学习指南
  • 创业知识概论
  • 机器学习流量识别(pytorch+NSL-KDD+多分类建模)
  • 深入解析BERT:语言分类任务的革命性引擎
  • 5G 浪潮:发展全景、困境突围与未来航向
  • 目标检测新升级:用YOLOv8打造密度视频热力图可视化
  • Agent轻松通-P3:分析我们的Agent
  • LeetCode 680.验证回文串 II
  • PowerShell批量处理文件名称/内容的修改
  • 大模型在肺癌预测及个性化诊疗方案中的应用研究
  • Git——分布式版本控制工具
  • NVIDIA开源Fast-dLLM!解析分块KV缓存与置信度感知并行解码技术
  • android gradle的优化
  • uni-app-配合iOS App项目开发apple watch app
  • 【大模型学习】项目练习:知乎文本生成器
  • RIP路由协议实验任务八:RIPv1配置与分析
  • Seata的总结
  • Kafka协议开发总踩坑?3步拆解二进制协议核心
  • 领码 SPARK 融合平台赋能工程建设行业物资管理革新——数智赋能,重塑中国模式新范式
  • NestJS中实现动态Cron任务管理
  • 【 感知集群】大规模分布式基础设施的AI赋能蓝图
  • JS红宝书笔记 8.2 创建对象