Linux 常用小工具:crontab
Crontab 是一款 Linux 下的配置工具,可以规定定时执行脚本,非常好用。
Crontab 是一款 Linux 下的配置工具,可以规定定时执行脚本,非常好用。
安装
如果没有,就先装上:
1
yum install crontabs
基本原理
Linux 下的任务调度分为两类:系统任务调度和用户任务调度。Linux 系统任务是由 cron (crond) 这个系统服务来控制的,这个系统服务是默认启动的。用户可以使用 crontab 命令,方便地对自身的系统服务进行调整。
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
时间参数
前五个参数是定时设定。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
(防止内容打到屏幕上看着不爽)”