小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前几篇文章有讲到Linux系统中关于时间的一些操作命令,包括
date,at,sleep等,这篇文章来讲关于时间的最后一个命令,那就是终极大杀器crontab。
一、基础概念
crontab其实就是一个命令,一个很强大的命令,用来定时执行程序,所谓定时,就是我们可以重复重复又重复的执行,比如每小时,每分钟,每秒,每天某个时刻等等。
其原理是读取和修改一个名为crontab的文件。这个而文件中包含了需要定时执行的程序的列表,以及重复执行的时刻。
实际上,对于crontab包含两个命令,一个叫crontab,这个命令用于修改crontab的文件,另一个叫cron,用户实际执行定时的程序。
而且需要注意的是对于每一个用户,其都有一个单独的crontab的文件,进行了用户级别的隔离。
二、基础使用
使用前,确保已经安装,如果未安装,采用以下的命令。
# centos install
$sudo yum install vixie-cron crontabs
$chkconfig crond on
$service crond start
# Debian install
$sudp apt install cron
$service cron restart
安装完成后可进行简单操作。
#显示crontab文件
$crontab -l
输出内容如下:
因为这是一台新的服务器,我还没有使用过crontab命令,所以并没有这个文件。
没有这个文件,我们就来创建这个文件。
#创建,编辑crontab 文件
$crontab -e
编辑这个文件的内容,填写的每一条定时任务,都需要遵守下面的语法规则。
# m h dom mon dow command
x x x x x command
- 第一个x:代表分钟(0-59)
- 第二个x:代表小时(0-23)
- 第三个x:代表日(1-31)
- 第四个x:代表月份(1-12)
- 第五个x:代表星期几(0-6,星期日是0)
- command: 那就是需要执行的命令
是不是感觉没那么难,另外需要注意的是,如果前五个x不想填任何值,可以使用星号(*) 填充,其表示任何值。
还有另外一点,如果不想执行某条任务,再前面加 #号注释保存文件即可。
输出命令进入编辑状态
$crontab -e
在文件中输入内容
10 21 * * * touch ~/new_file
然后保存文件,控制台的打印如下。
意思是安装了新的crontab文件。
那如果不想执行这个任务怎么办?第一可以按照上面的方式在任务前加#号处理,或者是直接删除crontab文件。
# 删除crontab文件
$crontab -r
这些是crontab最常见的使用,更多见帮助手册。
三、更多用法
48 * * * * command
0 0 * * 2 command
30 5 1-16 * * command
0 0 * * 1,3,5 command
0 */4 * * * command
*/5 * * * 1-4 command
那么问题来了,上面的定时任务是如何执行的呢?欢迎留言区留下你的答案!