一:需求

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

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

有两种方式:

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. Service里边启动Activity注意事项

    Intent intentv = new Intent(Intent.ACTION_VIEW); intentv.setData(uri); intentv.putExtra("keepTi ...

  2. build.js

    // https://github.com/shelljs/shelljs// 检查NodeJS和npm的版本require('./check-versions')() process.env.NOD ...

  3. 从mysql导入及导出csv

    csv导入: load data local infile 'D:/pcode/shu/data/a.csv' into table a fields terminated by ','; csv导出 ...

  4. Linux 编译时内存不足

    1.编译内核出现问题:No space left on device AS      .tmp_kallsyms1.o .tmp_kallsyms1.S:2: fatal error: when wr ...

  5. VSCode一直弹框错误Linter pylint is not installed

    确保已经安装Python编译环境 点击下图位置(这个是我已经安装过后的文字,原本显示“搜索Python”字样) 点击后显示如下,点击安装 然后出现一大坨命令 最终出现“Successfully ins ...

  6. 前端基础之BOM和DOM day52

    前端基础之BOM和DOM   前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互 ...

  7. pycharm 出现Process finished with exit code 0 或 Process finished with exit code -1

    Process finished with exit code 0 意味着你的程序正常执行完毕并退出. 可以科普一下exit code,在大部分编程语言中都适用: exit code 0 表示程序执行 ...

  8. PyQt5速成教程

    博客地址 https://www.jianshu.com/nb/26159952

  9. (转)android权限(permission)大全

    文章转载自:http://blog.csdn.net/hai_qing_xu_kong/article/details/24265533 1.android.permission.WRITE_USER ...

  10. C++中的fstream,ifstream,oftream

    https://blog.csdn.net/kingstar158/article/details/6859379 先mark一个大佬的随笔,有时间再回头看 总结: 使用ifstream和ofstre ...