文章

Linux 常用小工具:crontab

Crontab 是一款 Linux 下的配置工具,可以规定定时执行脚本,非常好用。

Crontab 是一款 Linux 下的配置工具,可以规定定时执行脚本,非常好用。


安装

如果没有,就先装上:

1
yum install crontabs

基本原理

Linux 下的任务调度分为两类:系统任务调度和用户任务调度。Linux 系统任务是由 cron (crond) 这个系统服务来控制的,这个系统服务是默认启动的。用户可以使用 crontab 命令,方便地对自身的系统服务进行调整。

image-20200309114738378

crond调取的配置文件均位于/var/spool/cron目录下,每个配置文件分别以该用户名命名。

命令格式

1
2
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

-u user 指更改某个用户的 crond 服务,不添加则为选择本用户。如果服务器就一个用户,可以无视这一项。

file 指某个 crontab 配置文件。如果使用该命令,则意味着 crond 采用该配置文件中的任务。

-e:编辑当前用户的配置文件。

-l:列出当前载入的配置文件中的所有任务。

-r:从 /var/spool/cron 目录中删除某个用户的 crontab 文件。

系统服务控制

1
2
3
4
5
sudo service crond start     #启动服务
sudo service crond stop      #关闭服务
sudo service crond restart   #重启服务
sudo service crond reload    #重新载入配置
sudo service crond status    #查看服务状态

配置文件格式

1
minute hour day month week command

crontab-format

时间参数

前五个参数是定时设定。Linux 会每分钟检测一次当前时间是否满足了这些参数,只有同时满足这五个时间参数,才会执行后面的命令。

这五个参数分别是:

  • 分钟:可填写0~59,指具体的一个小时内的第几分钟。
  • 小时:可填写0~23,指24小时制下的小时数。
  • 日:可填写1~31,指具体的日期,几号。
  • 月:可填写1~12,指具体的月份,几月。
  • 星期:可填写0~6,指一周之内的星期几,0指星期日,以此类推。

此外,这些参数都还可以填写**表示“任意”或者说“每个……都”。比如,第一个参数填*,则表示每分钟都执行;第四个参数填写*,则表示每月都执行;第五个参数填写*,则表示一周之内的每天都执行。

参数内还可以用,分割,比如第一个参数如果写成3,15,则表示“每个3分钟和15分钟”。

参数内还可以用-连接,比如第二个参数如果写成8-10,则表示“8点到11点期间的每个小时”。

*还可以用/处理,比如第三个参数如果写成*/2,则表示“每隔两天”。

命令参数

最后一个参数 command 表示具体的命令,就和平常命令行下输入命令效果一样。

命令中可以采用 crontab 的专属命令参数 run-parts,此时,后面应加上一个目录,表示“执行该目录下所有脚本”。比如 01 * * * * root run-parts /etc/cron.hourly 表示“每小时执行 /etc/cron.hourly 目录内的所有脚本”。

例子

1
0 12 * * 4 /root/cronscript/geteconomist >/dev/null 2>&1

我制作了一个使用 Calibre 为我的 Kindle 推送最新一期 The Economist 的脚本,我希望它能在每周四 The Economist 更新时定时执行。于是就把这段配置写入 crontab 中,意思是:“在任何月任何日的每个星期四的每个12点0分执行 /root/cronscript/ 下的 geteconomist 脚本,并把标准输出打入 /dev/null(防止内容打到屏幕上看着不爽)”


参考文献

  1. 每天一个linux命令(50):crontab命令
  2. Linux Tools Quick Tutorial - 19. crontab 定时任务
  3. Linux之crontab定时任务
  4. crontab用法与实例
本文由作者按照 CC BY 4.0 进行授权