一、背景
老板:小白,刚才咱们的机器告警磁盘空间不足了,你去定位一下原因。
我:(......空间不足碍我屁事儿)好的,马上定位
我:老板,太多N天前的日志文件占用了太多空间。
老板:你感觉你保留着这些日志,我会给你晋升涨薪嘛?
我:应该不会吧(如果会的话,那就太好了)
老板:(发怒)你知道不会,还不赶快去清理一下日志文件。
(说完便扬长而去,留下在风中凌乱的我)
二、解决方案
有些问题你感觉是送分题,往往这却是一道送命题
rm -rf unused.log
纵然粗暴,但是你仍可以将它玩出细腻的花样。
问:那怎么才能玩的细腻呢?
答:crontab。
什么你还不知道crontab?
答:那还不快去google一下。
三、Crontab介绍
crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。
3.1 命令格式
本文不是详细介绍crontab,如想详细了解,还请自行google。
crontab [-u user] [ -e | -l | -r ]
-u user:用来设定某个用户的crontab服务
-e:编辑crontab文件
-l:显示crontab文件内容
-r:删除crontab文件
3.2 文件格式
分 时 日 月 星期 要运行的命令
四、实践
4.1 创建删除日志的shell文件
首先我们先创建删除日志的shell文件,这样cron任务要运行的命令就是
sh myshell.sh。
我的任务是删除7
天前创建的日志文件,所以shell文件delLog.sh
定义如下:
# !/usr/binfind /logs/ -name '*.log' -mtime +7 -exec rm -rf {} \;
4.2 创建并编辑
使用crontab -e
,存在任务则直接编辑,不存在则创建之后再编辑。编辑内容如下:
0 5 * * 1 sh delLog.sh
0 5 * * 1
:表示每周一的凌晨5点执行
五、遇到的问题总结
问题1:配置了定时任务,但是没有生效
最终通过该文章得到了解决:crontab 在mac上不执行问题研究
问题2:我想删除文件夹怎么办
因为上面是使用find
命令找到并删除,所以使用参数-type d
即可。例如: 想删除7天前创建且名为log
的文件夹。
# !/usr/binfind /logs/ -name 'log' -type d -mtime +7 -exec rm -rf {} \;
六、工具
最后给大家推荐一下自己用到的相关工具:
crontab-generator:该网站可以通过页面配置生成相应的表达式
在线工具:该网站可以验证crontab表达式的准确性,区分不同语言(linux、java)
来源:https://juejin.im/post/5e660de3518825496f38321e☆ END ☆