crontab是类Unix系统最好用的工具之一,用来设置定时任务,这些定时任务也被称为“Cron Jobs”。Cron通常被用于运行定时备份、监控磁盘使用情况、定期删除不需要的文件(比如日志文件)、运行系统维护任务等。本文主要介绍crontab的基础使用,基本能覆盖大部分使用场景。

crontab的基本用法

    分钟(0-59) 小时(0-24) 日(1-31) 月(1-12)星期(0-7) <要执行的命令>

其中星期从0到6,0表示周日,1~7对应星期一到星期日,也可以用0来表示星期日

Crontab语法格式

上图每个星号*分别对应具体的时间块(分钟、小时、日等)

执行crontab -l可以列出当前用户的所有定时任务

如果想要编辑当前用户的定时任务,执行crontab -e,如果是第一次编辑crontab定时任务,需要先选择想要使用的编辑器,如下所示,输入对应的编号,如输入3,选择vim编辑器。

no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

选择一个适合你的编辑器,然后实际上就是使用选中的编辑器打开了一个crontab文件,在打开的文件中按照crontab的格式每添加一行语句就对应一个定时任务,当然我们也可以删除一行语句来删除一个定时任务。

crontab的使用方式举例

1. 每分钟执行一次命令

* * * * * <要执行的命令>

比如每分钟往文件~/hello.txt中写入一个“hello world”,就可以在crontab文件中写入下面的crontab语句:

* * * * * echo "hello world" >> ~/hello.txt

保存、退出编辑器。然后可以通过crontab -l看到我们刚刚添加的任务,等待几分钟就可以看到~/hello.txt文件里面多了几个”hello world”

2. 每5分钟执行一次命令

*/5 * * * * <要执行的命令>

3. 每15分钟执行一次命令

*/15 * * * * <要执行的命令>

4. 每个小时的27分执行一次命令

27 * * * * <要执行的命令>

该定时任务每小时执行一次,每次在27分执行。

5. 也可以指定多个具体的执行时间点,使用逗号分隔

0,5,10 * * * * <要执行的命令>

将在每个小时的0分、5分、10分分别执行一次

6. 每半小时,即每30分钟执行一次命令

*/30 * * * * <要执行的命令>

如果现在是10点整,那么该任务将分别在10:30 11:00 11:30 … 执行。

需要注意的是具体的时间和设置定时任务的时间是无关的,比如我们在10:17设置了定时任务,那么这个定时任务执行的时间不是10:47、11:17、11:47等,而是10:30、11:00、11:30等.

7. 每小时的整点即0分时执行一次命令

0 * * * * <要执行的命令>

8. 每两小时执行一次命令

0 */2 * * * <要执行的命令>

如果当前时间是10点,那么下次执行时间就是12点

9. 每天执行一次命令

0 0 * * * <要执行的命令>

该命令将会在每天的00:00分执行

10. 每天凌晨03:00执行命令

0 3 * * * <要执行的命令>

11. 每个周日执行一次命令

0 0 * * 7 <要执行的命令>

12. 每个工作日(周一到周五)执行一次命令

0 0 * * 1-5 <要执行的命令>

13. 每个月执行一次命令

0 0 1 * * <要执行的命令>

该定时任务会在每个月的1号,0点0分执行

14. 每个月10号的16:15执行一次命令

15 16 10 * * <要执行的命令>

15. 每个季度执行一次命令(即每三个月执行一次)

0 0 1 */3 * <要执行的命令>

该定时任务会在每个季度的第一个月的1号0点0分执行

16. 在某个月的每一天的特定时间执行一次命令

5 0 * 4 * <要执行的命令>

该定时任务会在每年4月份的每天的0点5分执行

17. 每6个月执行一次命令

0 0 1 */6 * <要执行的命令>

18. 每年执行一次命令

0 0 1 1 * <要执行的命令>

该定时任务会在每年的1月1号0点0分执行

19. 使用标签设置任务

除了上述方式,还可以通过标签的方式来设置定时任务,crontab支持的定时标签见下表

@reboot 在系统启动的时候执行一次
@yearly 每年执行一次
@annually 和@yearly相同
@monthly 每个月执行一次
@weekly 每周周星一次
@daily 每天执行一次
@midnight 和@daily相同
@hourly 没消失执行一次
@reboot <要执行的命令>

该定时任务在系统每次启动后执行

20. 移除当前用户所有的定时任务

crontab -r

使用man crontab可以查看crontab更多细节内容

CronTab语法自动生成器

另外,通过基于网页的crontab语法生成器可以快速地检查crontab语句是否符合预期或者根据我们期望的间隔时间快速生成想要的crontab语句,下面两个网站都是英文的,但是都是很简单的英文,很容易上手。

crontab.guru 中输入crontab语句,网站将会告诉我们这段语句的含义,以及执行的具体时间,可以用来检验编写的crontab语句是否正确

crontab-generator.org中可以设定我们想要的运行间隔,然后网页会自动生成对应的crontab语句。

本文为翻译文章,原文请点击 www.ostechnix.com/a-beginners-guide-to-cron-jobs