一:需求

  在开发中存在这样的情况,为了防止文件的误删,不允许开发人员直接删除项目中要用到的文件,而是将它们移动到某个目录,然后由一个周期任务去检测并删除内部过期的文件;

二:检测文件是否是过期文件

有两种方式:

1.find中的ctime选项,这个ctime即是change time,即对文件的元数据修改都会更新此值,包括mv/chmod/chown等等;(mv命令会修改文件的user和group)

2.stat中的-Z选项,也是用来显示change time的,这种方式需要将文件的ctime赋值到变量,然后通过date获取当前时间,最终比较后来判断是否要删除;

三:detectDir目录中过期文件的删除实现

由于2中stat的方式最终还是要依赖find命令先找出文件,而find命令里已经提供好了对应的选项,因此直接用find即可:find detectDir -type f -ctime +14 -exec rm {} \;(这里rm {}可以理解为循环执行rm 后面的参数是find找到的所有文件逐个遍历的结果)

可以将detectDir目录的user/group均设置为root,然后设置其权限为755,之后其它人要通过sudu才能将文件放入回收文件夹或取消回收;

或者是将目录权限设置为777或733,然后通过chattr附加+a命令使得不能将目录里的文件删除或mv;然后脚本由root运行,先执行chattr -a,对目录中过期文件清理后执行chattr +a;

三:创建周期任务定期执行脚本

1.通过root用户执行contab -e(表示root用户编辑自己的定期任务“表”,这个任务“表”里是可以有多个定期任务的)

接着弹出编辑页面,将页面里的内容修改为如下并保存就能每天的凌晨30分删除/usr/var目录下的change time超过14天的文件:

# 分 时 日 月 星期,其中日和星期不能同时使用(其中一个要为*)
# cron中所有的命令都要是绝对路径,即rm xx不可,要/usr/bin/rm xx
# 分不能为*或空,其它时间可以用,或-进行多项匹配,如星期的1,,
# 表示星期1//3均启用,而1-5表示星期1到5都启用;
# 星期的0和7都代表星期天,每行只写一条命令;(有多个命令的最好写个shell,记得赋予x权限,shell内部的命令不需要绝对路径)
* * - /usr/bin/find /usr/var -type f -ctime + -exec /usr/bin/rm{} \;

Linux创建一个周期任务来定期删除过期的文件的更多相关文章

  1. [转帖] Linux 创建一个简单的私有CA、发证、吊销证书

    原创帖子地址:   https://blog.csdn.net/mr_rsq/article/details/71001810 Linux 创建一个简单的私有CA.发证.吊销证书 2017年04月30 ...

  2. linux的一个find命令配合rm删除某天前的文件

    语句写法: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例1: 将/usr/local/backups目录下所有10天前 ...

  3. (转)linux的一个find命令配合rm删除某天前的文件

    转自:http://www.cnblogs.com/mingforyou/p/3930624.html 语句写法:find 对应目录 -mtime +天数 -name "文件名"  ...

  4. 定期删除IIS日志文件

    服务器中由于监控的需要会经常生成很多日志文件,比如IIS日志文件(C:\inetpub\logs\LogFiles),一个稍微有流量的网站,其日志每天可以达到上百兆,这些文件日积月累会严重的占用服务器 ...

  5. centos中创建自动备份Mysql脚本任务并定期删除过期备份

    背景: OA系统数据库是mysql,引擎为myisam,可以直接通过拷贝数据库文件的方式进行备份 创建只备份数据库的任务: 创建保存mysql数据库备份文件的目录mysqlbak mkdir /hom ...

  6. Java Scheduler ScheduledExecutorService ScheduledThreadPoolExecutor Example(ScheduledThreadPoolExecutor例子——了解如何创建一个周期任务)

    Welcome to the Java Scheduler Example. Today we will look into ScheduledExecutorService and it's imp ...

  7. 【github课程】创建github仓库和库创建一个版本号,并添加到存储库文件的版本号

    首先,需要登录github注册一个帐号:https://github.com/ 注册帐号登录后,.在右上角,"新仓库": 然后会出现例如以下的界面: 仅仅须要输入仓库的名称,描写叙 ...

  8. 使用node创建一个服务器,运行vue打包以后的文件

    原理就是使用node里的express框架,搭建一个服务器,然后访问dist文件夹里的文件 prod.server.js var express = require('express') var co ...

  9. shell定期转移日志文件到云盘并定期删除云盘文件

    shell 脚本定期处理如下: cat /home/backup/logs_delete.sh #!/bin/bash /bin/find /data/logs/nginx/ -name " ...

随机推荐

  1. sqlserver编号

    select ROW_NUMBER() OVER (ORDER BY 字段 DESC) AS rid,* from 表名

  2. rbac 权限分配, 基于formset实现,批量编辑

    已经完成了  批量添加的功能. 还想要一个批量修改的功能了.随之而来的第一个问题就是,  我们的formset 并不是一条记录.而是 多条记录,甚至整个表的记录.那么显而易见的问题就是,当前端页面把数 ...

  3. Windows Server 2008 MetaFile设置占用内存限制

    最近遇到Windows Server 2008服务器内存持续飙升,48G内存用了99%,查看任务管理器的进程,也没发现具体哪个进程用的内存比较大? 于是,在网上找了了一个查看内存的工具RamMap,具 ...

  4. Java中重写与重载的区别

    方法重载:关键字overload,方法名和方法的返回类型都相同,方法参数个数和类型不一样方法重写:也叫方法覆盖,关键字override,相对于类继承而言,重写的方法名,返回类型,参数个数,参数类型都要 ...

  5. ListView的自定义适配器及其优化(listView序号混乱问题的处理)

    ListView是最常使用的android组件之一,关于listView的优化问题刚刚了解了一些,在这里做出总结. PS:如果想让ListView中的item根据数据内容显示item的大小,需要在it ...

  6. C++中string类

    https://blog.csdn.net/sinat_36184075/article/details/54836053 https://blog.csdn.net/fdqw_sph/article ...

  7. hdu 1509 & hdu 1873 & hdu 1896 (基础优先队列)

    http://acm.hdu.edu.cn/showproblem.php?pid=1509 裸的优先队列的应用,输入PUT的时候输入名字,值和优先值进队列,输入GRT的时候输出优先值小的名字和对应的 ...

  8. poj 2777(线段树+lazy思想) 小小粉刷匠

    http://poj.org/problem?id=2777 题目大意 涂颜色,输入长度,颜色总数,涂颜色次数,初始颜色都为1,然后当输入为C的时候将x到y涂为颜色z,输入为Q的时候输出x到y的颜色总 ...

  9. iOS.FileSystem.HardLinkAndSymbolicLink

    关于iOS中的硬连接和符号连接(软连接),iOS其实是Unix的变体, 所以在这方面也继承了Unix的特性,下面这个连接比较详细的进行了 类比说明. 1. http://www.tanhao.me/p ...

  10. 更好地限制一个UITextField的输入长度

    要限制一个UITextField的输入字数,首先想到的应该是通过 UITextFieldDelegate 的代理方法来限制: - (BOOL)textField:(UITextField *)text ...