介绍
cron守护进程是linux内建的用于执行定时任务的进程. cron会读取crontab(cron table)文件的内容并执行里面的任务.
通过使用一些特定的语法, 你可以配置定时任务并且让cron进程执行.
这篇文章就是告诉大家如何配置cron.
前提准备
- 一个运行的linux系统
- 能使用命令行或图形化界面操作linux系统
- 拥有一个root权限的账户
基础的crontab语法
cron读取crontab的文件内容进行执行, 这个文件使用了一些特殊的语法结构.
为了能够设置cron job, 我们需要明白组成这些语法的基本结构. 下面就是一个基础结构:
a b c d e /directory/command [output]
根据上面的结构, 我们可以发现cron命令的一些特征:
- 前五个字段
a b c d e
决定了执行的时间和循环周期 - 第6个字段
/directory/command
定义了我们要运行的脚本存放的位置 - 第七个字段
output
是一个可选项, 定义了当任务完成后如何现实结果.
cron任务的时间格式
前五个字段是用数字来表示的, 并且用空格来分割, 下面这张表格概括了可能用到的时间格式:
字段
可能的值
语法
描述
[a] – 分钟
0 – 59
7 * * * *
每小时的第七分钟就执行
[b] – 小时
0 – 23
0 7 * * *
每天的早上7点0分执行
[c] – 天
1 – 31
0 0 7 * *
每月的第7天0时0分执行
[d] – 月
1-12
0 0 0 7 *
7月份0天0时0分执行
[e] – 星期几
0 - 6
0 0 * * 0
每个星期天0时0分执行
需要执行的命令
一般代表的是一个可执行文件存放的位置, 例如:
/root/backup.sh
输出结果(可选)
默认情况下, cron
执行完任务后, 会发送一封邮件给任务的拥有者, 这样可以方便追踪任务进度. 但是很要记住, 很可能会把你的收件箱填满.
所以我们可以阻止cron
发送邮件给我们, 来防止我们的邮箱爆炸. 使用>/dev/null 2>&1
命令, 例如:
* * * * * directory/command >/dev/null 2>&1
使用操作符(可选)
为了提高效率, cron语法也可以使用操作符来操作:
- 星号(*)代表所有值,
* * * * 7
这条命令就是告诉cron, 任务在所有月份的每周7的每分钟都执行 - 逗号(,)可以用来分割不同的值
* 1,2 * * *
这条命令表示每天1,2小时每分钟都执行 - 横杠(-)用来表示一个取值范围,
* 1-7 * * *
这条命令表示每天1,2,3,4,5,6,7小时的每分钟都执行 - 斜杠(/)表示间隔的执行,
*/2 * * * *
这条命令表示每2分钟执行一次,0 */3 * * *
这条命令表示每隔3小时0分钟执行
让我们来设置一个定时任务吧
如果要配置定时任务, 我们可以用自己喜欢的编辑器打开crontab
文件
怎么编辑crontab文件呢?
可以使用下面的命令为当前用户来编辑定时任务
crontab -e
你可以添加任意多个定时任务, 但是记住每行代表一个任务, 如果你使用换行符, 就当我没说话.
当添加完任务退出后, cron守护进程就会自动读取crontab的任务, 然后开始执行, 我们不必重新启动cron进程, 因为它很智能.
怎么为其他用户使用定时任务呢?
可以使用下面的命令来指定需要执行的用户名
crontab –u other_username –e
定时任务的演示
下面这个定时任务是告诉大家, 每月的第一天如果是周四, 那么早上两点钟每分钟都执行一次/root/backup.sh
脚本
* 2 1 * 4 /root/backup.sh
下面表格有更多的任务演示:
定时任务
命令解释
* * * * * /root/backup.sh
每分钟执行一次任务
30 * * * * /root/backup.sh
每30分钟执行任务
0 * * * */root/backup.sh
每小时0分执行任务
0 0 * * * /root/backup.sh
每天的0时0分执行任务
0 2 * * * /root/backup.sh
每天的早上2点执行任务
0 0 1 * * /root/backup.sh
每月的第一天0时0分执行任务
0 0 15 * * /root/backup.sh
每月的第十五天0时0分执行任务
0 0 0 12 * /root/backup.sh
12月的0天0时0分执行任务
0 0 * * 6 /root/backup.sh
每个星期6的0时0分执行任务
查看已有的定时任务
crontab –l
结尾
经过上面的学习, 我们应该很清楚如何设置cron的定时任务了, 可喜可贺.