• Linux环境如何定时删除指定目录的过期文件
  • 发布于 2个月前
  • 719 热度
    0 评论
  • 奥特蛋
  • 1 粉丝 42 篇博客
  •   
前言
自研的云存储服务,经常会遇到碎片分片和过期文件的处理问题。最简单的处理方法就是启动一个定时任务定期删除过期的文件和分片。这就是今天本文要讨论的问题。

正文
一段一点问题
启动定时删除任务一般会涉及到三个问题,其中,一个是位置问题,另两个是时间问题。位置问题大家都很好理解,就是要删除哪个目录下的文件。时间问题又可以成为“一段一点”,其中,“一段”就是多久的文件认为过期,换句话说就是哪个时间段内的文件是需要保留的;“一点”就是删除频率,比如每天临晨两点执行删除操作。

删除任务脚本
理解了上面的内容,就什么也不用多说啦。直接看删除任务脚本吧。

脚本内容如下:
#!/bin/bash
# 设置过期天数
EXPIRE_DAY=30
# 设置删除目录
FOLDER=/var/www/html/user-media/files
# 删除
find ${FOLDER} -mtime +${EXPIRE_DAY} -type d | xargs rm -rf
# find /var/www/html/user-media/files -mtime +20 -type d | xargs rm -rf
echo 'success'
将上述脚本保存为 autoDelTask.sh 文件。

注意:EXPIRE_DAY = 30 语句中是不能存在空格的。

修改脚本权限
为了可以执行上面的脚本,接下来需要修改脚本权限,命令如下:
chmod 755 autoDelTask.sh
添加自动任务
好了,最后一步了,我们需要把这个脚本设置成系统的定时任务。

添加自动任务,命令如下:
crontab –e
粘贴下面的命令到文件中:
0 13 * * * /root/work/bag/autoDelTask.sh >> /root/work/bag/autoDelTask.log
有些小伙伴看到上述命令语句可能会蒙圈,不禁会问:都啥呀???

这里稍微解释一下:
前面六个字段分别是分、时、日、月、周、命令。其中,
第 1 列的 * 号表示分钟 1-59 每分钟用*或者 */1 表示;
第 2 列的 * 号表示小时 0-23 小时(其中,0 表示 0 点);
第 3 列的 * 号表示日期 1-31 日;
第 4 列的 * 号表示月份 1-12 月;
第 5 列的 * 号表示每周,0-6(其中,0 表示星期天);
第 6 列表示要运行的命令。

另外,>>  表示保存日志到指定文件中。通过上面的解释,我们也就理解了刚才粘贴的命令的意思了。是的,上面命令的意思就是每天下午 1 点开始执行清理任务,保留最近 30 天的文件。

查看自动任务状态
启动任务后,如果不确定定时任务是否已经生效了,可以使用如下命令查看定时任务的状态:

crontab -l

如果可以看到对应的任务列表,就表示已经设置成功了。

用户评论