一、背景

老板:小白,刚才咱们的机器告警磁盘空间不足了,你去定位一下原因。

我:(……空间不足碍我屁事儿)好的,马上定位

我:老板,太多N天前的日志文件占用了太多空间。

老板:你感觉你保留着这些日志,我会给你晋升涨薪嘛?

我:应该不会吧(如果会的话,那就太好了)

老板:(发怒)你知道不会,还不赶快去清理一下日志文件。

(说完便扬长而去,留下在风中凌乱的我)

二、解决方案

有些问题你感觉是送分题,往往这却是一道送命题

rm -rf unused.log 纵然粗暴,但是你仍可以将它玩出细腻的花样。

问:那怎么才能玩的细腻呢?
答:crontab。

什么你还不知道crontab?
答:那还不快去google一下。点我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/bin

find /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/bin

find /logs/ -name 'log' -type d -mtime +7 -exec rm -rf {} \;

六、工具

最后给大家推荐一下自己用到的相关工具:

  1. crontab-generator:该网站可以通过页面配置生成相应的表达式
  2. 在线工具:该网站可以验证crontab表达式的准确性,区分不同语言(linux、java)

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

各大公司面试题分类整理 下一篇