一:需求

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

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

有两种方式:

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. 关于控制反转(IOC)容器 ,依赖注入(DI)模式必读文章收集

    推荐一篇国外設計大師Martin Fowler的大作:Inversion of Control Containers and the Dependency Injection pattern http ...

  2. Soa思想分布式服务webservice WCF

    什么是分布式事务 分布式事务就是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上.以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这 ...

  3. PHP swoole process的使用

    引入背景:假如我们每天有10000个订单生成,需要同步到仓储系统中去,以前做法是开启一个crontab去跑这些任务,但是发现总有感觉同步效率低,间隔时间都是分钟级别的. 解决方案测试:我们将同步订单的 ...

  4. this 关键字 详解

    JS中的this关键字让很多新老JS开发人员都感到困惑.这篇文章将对this关键字进行完整地阐述.读完本文以后,您的困惑将全部消除.您将学会如何在各种不同的情形正确运用this. 我们和在英语.法语这 ...

  5. VS2010错误

    1.用VS2010生成C++程序时,链接器工具错误 LNK1123: fatal error LNK1123: failure during conversion to COFF: file inva ...

  6. Codeforces 798C. Mike and gcd problem 模拟构造 数组gcd大于1

    C. Mike and gcd problem time limit per test: 2 seconds memory limit per test: 256 megabytes input: s ...

  7. centos7中输入ifconfig出现ens33,没有eth0(转)

    vmware安装的centos7中没有出现eth0网卡,也没有ip,不能上网,输入ifconfig后如下图 解决办法 1.编辑网卡的配置文件 vi /etc/sysconfig/network-scr ...

  8. Ubuntu中文乱码问题解决方案

    问题描述 在ubuntu上部署了jar包(java开发的图形界面),但是图形界面上的中文显示乱码. 采用以下步骤后你能够完美支持中文 第一步,安装中文支持包langauge-pack-zh-hans ...

  9. Shortest Unsorted Continuous Subarray LT581

    Given an integer array, you need to find one continuous subarray that if you only sort this subarray ...

  10. 解析vue2.0中render:h=>h(App)的具体意思

    render:h=>h(App)是ES6中的箭头函数写法,等价于render:function(h){return h(App);}. 注意点:1.箭头函数中的this是 指向 包裹this所在 ...