在linux下,我们时常会实行一些定期定时任务,比如,定时重启系统,周期性清理/tmp,周期性备份一次数据库,周期性分析日志。而且有时候因为某些因素的限制,需要执行任务的时间和你自身的时间并不匹配,比如凌晨三点重启系统。这时候,我们就可以利用linux系统的计划工具。

crontab命令常见于Unix和类Unix操作系统之中(linux属于类Unix操作系统),用于设置周期性被执行的命令。

通过crontab命令,我们可以在固定的间隔时间执行指定的系统指令或shell scrpit脚本,时间间隔的单位可以是分钟,小时,日,月,周的任意组合。

  1. # Example of job definition:
  2. # .---------------- minute (0 - 59)
  3. # | .------------- hour (0 - 23)
  4. # | | .---------- day of month (1 - 31)
  5. # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
  6. # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
  7. # | | | | |
  8. # * * * * * user-name command to be executed

1.创建crontab周期命令

在大多数linux发行版中,crontab时默认开启的,如果你不放心,可以手动启动一下。
截图录屏_选择区域_20200101182955.png

启动之后,我们通过以下命令来添加计划

  1. crontab -e

第一次启动的话,他会提示我们选择编辑器。我们通常选用第二个vim进行编辑。
截图录屏_选择区域_20200101183454.png

选择后,出现如下界面。
截图录屏_deepin-terminal_20200101183542.png

和其他配置文件相同,以#开头的都是注释,我们就在这里面,使用vim对crontab进行配置,输入要执行的命令以及时间。

想要详细了解crontab,我们可以使用到上一讲中的info或者man去查看。

  1. #在了解了基本的命令格式后
  2. #创建一个周期命令,每分钟,创建一个以当前时间信息命名的空文件
  3. #在刚刚打开的配置文件中,输入以下命令,以达到效果
  4. */1 * * * * touch /home/compton/test/$(date +\%Y\%m\%d\%H\%M\%S)

注意:
%在crontab文件中,由结束命令行,换行,重定向的作用,所以我们要使用转义符\去格式化输出。

输入结束后,保存并退出。
输出如下界面
![截图录屏
选择区域20200101184821.png](https://cdn.nlark.com/yuque/0/2020/png/197026/1577875706210-87cb1411-e259-419f-ae64-97838f05e331.png#align=left&display=inline&height=23&name=%E6%88%AA%E5%9B%BE%E5%BD%95%E5%B1%8F%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20200101184821.png&originHeight=23&originWidth=289&size=1583&status=done&style=none&width=289)
表示,我们已经成功添加了命令。

这时候,我们接着看crontab的其他应用,过一段时间,再来看,这个命令是否被真实的执行了。

2.查看crontab周期命令

我们可以通过 -l 参数,来查看crontab这个文档(注释同样被输出),来查看我们目前有哪些命令正在被周期执行。
截图录屏_选择区域_20200101185212.png
我们看到,最后一行,正是我们刚刚添加的命令。

查看一下我们的test文件夹,看看命令是否被执行了。
截图录屏_deepin-terminal_20200101185428.png
在我这,是已经成功运行了。
但是这也并不是万无一失的,有的计算机由于发行版,或者其他什么原因。系统并没有自启动cron的守护进程,这样crontab的周期性命令并不会被执行。
我们可以查看一下cron守护进程是否在后台默默运行。

两种方式查看:
截图录屏_deepin-terminal_20200101185846.png

我们再查看一下系统日志,看看在crontab周期运行后的信息反馈。
截图录屏_选择区域_20200101190446.png
我们不难在日志中找到,命令被执行的记录,并且时间也是无误的。

3.删除crontab周期性命令

做完演示,我们已经不需要这个命令了,这时候,我们删除这个命令。

  1. #删除命令
  2. crontab -r

我们先删除,然后再用-l去查看一下
截图录屏_选择区域_20200101191023.png

删除之后再查看,我们看到,该用户已经没有任务了。

小结:

  1. #添加任务
  2. crontab -e
  3. #删除任务
  4. crontab -r
  5. #查看任务
  6. crontab -l