【奇技淫巧】Linux | 时光之主-我们重复重复又重复crontab

629 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前几篇文章有讲到Linux系统中关于时间的一些操作命令,包括dateatsleep等,这篇文章来讲关于时间的最后一个命令,那就是终极大杀器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

输出内容如下:

image-1.png

因为这是一台新的服务器,我还没有使用过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

然后保存文件,控制台的打印如下。

image-2.png 意思是安装了新的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

那么问题来了,上面的定时任务是如何执行的呢?欢迎留言区留下你的答案!