在linux下,我们时常会实行一些定期定时任务,比如,定时重启系统,周期性清理/tmp,周期性备份一次数据库,周期性分析日志。而且有时候因为某些因素的限制,需要执行任务的时间和你自身的时间并不匹配,比如凌晨三点重启系统。这时候,我们就可以利用linux系统的计划工具。
crontab命令常见于Unix和类Unix操作系统之中(linux属于类Unix操作系统),用于设置周期性被执行的命令。
通过crontab命令,我们可以在固定的间隔时间执行指定的系统指令或shell scrpit脚本,时间间隔的单位可以是分钟,小时,日,月,周的任意组合。
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
1.创建crontab周期命令
在大多数linux发行版中,crontab时默认开启的,如果你不放心,可以手动启动一下。
启动之后,我们通过以下命令来添加计划
crontab -e
第一次启动的话,他会提示我们选择编辑器。我们通常选用第二个vim进行编辑。
选择后,出现如下界面。
和其他配置文件相同,以#开头的都是注释,我们就在这里面,使用vim对crontab进行配置,输入要执行的命令以及时间。
想要详细了解crontab,我们可以使用到上一讲中的info或者man去查看。
#在了解了基本的命令格式后
#创建一个周期命令,每分钟,创建一个以当前时间信息命名的空文件
#在刚刚打开的配置文件中,输入以下命令,以达到效果
*/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这个文档(注释同样被输出),来查看我们目前有哪些命令正在被周期执行。
我们看到,最后一行,正是我们刚刚添加的命令。
查看一下我们的test文件夹,看看命令是否被执行了。
在我这,是已经成功运行了。
但是这也并不是万无一失的,有的计算机由于发行版,或者其他什么原因。系统并没有自启动cron的守护进程,这样crontab的周期性命令并不会被执行。
我们可以查看一下cron守护进程是否在后台默默运行。
两种方式查看:
我们再查看一下系统日志,看看在crontab周期运行后的信息反馈。
我们不难在日志中找到,命令被执行的记录,并且时间也是无误的。
3.删除crontab周期性命令
做完演示,我们已经不需要这个命令了,这时候,我们删除这个命令。
#删除命令
crontab -r
我们先删除,然后再用-l去查看一下
删除之后再查看,我们看到,该用户已经没有任务了。
小结:
#添加任务
crontab -e
#删除任务
crontab -r
#查看任务
crontab -l