一:需求

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

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

有两种方式:

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. sql2000三个表的级联删除

    sql2000中三个表级联删除 create table a(    id int primary key,    Content varchar(50)) create table b(    id ...

  2. 线特征---LSD and LBD程序运行(一)

    最近在看有关特征提取的线特征,暑期就看了相关的论文:<基于点线综合特征的双目视觉SLAM方法_谢晓佳>,最近呢,把里面有关线特征提取LSD和描述子LBD的代码跑了一遍,记录如下: [1]L ...

  3. go语言net包rpc远程调用的使用

    一.基于http的RPC 服务端: package main; import ( "net/rpc" "net/http" "log" ) ...

  4. Struts2框架之Action类的访问

    1. 通过<action>标签中的method属性,访问到Action中的具体的方法. * 传统的配置方式,配置更清晰更好理解!但是扩展需要修改配置文件等! * 具体的实例如下: * 页面 ...

  5. jenkins自定义安装目录

    jenkins默认会安装到jvm环境变量的user.dir目录下,这样在系统重新安装后容易丢失. 将以下文件保存为start.bat放到jekins.jar同一目录,执行start.bat即可将jek ...

  6. vue(ajax:axios中文文档)

    axios 基于http客户端的promise,面向浏览器和nodejs 特色 浏览器端发起XMLHttpRequests请求 node端发起http请求 支持Promise API 监听请求和返回 ...

  7. python 3.6.5 hashlib 和 hmac 模块

    import hashlib m=hashlib.md5()# m=hashlib.sha256() m.update('hello'.encode('utf8'))print(m.hexdigest ...

  8. Jenkins与SVN持续集成

    官网下载Jenkins&SVN&eclipse,版本号没要求,建议使用最新稳定版本 登录Jenkins:http://localhost:8080 登录SVN:http://local ...

  9. HTML知识基础

    HTML 超文本标记语言(Hyper  Text  Markup Language):是一种用于创建网页的标准标记语言. Hyper  Text:指具有交互功能文本. Markup Language: ...

  10. 洛谷1993 小K的农场

    原题链接 裸的差分约束. \(X_a-X_b\geqslant C\) \(X_a-X_b\leqslant C\Rightarrow X_b-X_a\geqslant -C\) \(X_a-X_b\ ...