Linux命令行定时工具crontab

1. 说明

“Wisdom is the power to put our time and our knowledge to the proper use” ~ Thomas J. Watson

crontab 是 Linux系统的命令行定时工具,用于在固定的间隔时间执行指定的系统指令或 shell script 脚本。

格式为:

# ┌───────────── minute (0–59)
# │ ┌───────────── hour (0–23)
# │ │ ┌───────────── day of the month (1–31)
# │ │ │ ┌───────────── month (1–12)
# │ │ │ │ ┌───────────── day of the week (0–6) (Sunday to Saturday;
# │ │ │ │ │                                   7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>
# 分 时 日 月 星期 要运行的命令

注释:

  • 第1列 分钟 0~59
  • 第2列 小时 0~23(0表示子夜)
  • 第3列 日 1~31
  • 第4列 月 1~12
  • 第5列 星期 0~7(0和7表示星期天)
  • 第6列 要运行的命令

表达式:

  • 逗号(,)表示列举,例如: 1,3,4,7 * * * * echo hello world表示,在每小时的1、3、4、7分时,打印"hello world"。
  • 连词符(-)表示范围,例如:1-6 * * * * echo hello world表示,每小时的1到6分钟内,每分钟都会打印"hello world"。
  • 星号(*)代表任何可能的值。例如:在“小时域”里的星号等于是“每一个小时”。
  • 百分号(%) 表示“每"。例如:*%10 * * * * echo hello world 表示,每10分钟打印一回"hello world"。

2. 基本用法

Ubuntu

$ which crontab
/usr/bin/crontab

macOS

$ where crontab
/usr/bin/crontab
# 开启
sudo /usr/bin/crontab start

# 重启
sudo /usr/bin/crontab restart

# 关闭
sudo /usr/bin/crontab stop

3. 实例

可以直接在 https://crontab.guru 输入,查看想要的效果。

# 每1分钟执行一次myCommand
* * * * * myCommand
# 每小时的第3和第15分钟执行
3,15 * * * * myCommand
# 在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
# 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2  *  * myCommand
# 每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
# 每晚的21:30重启执行
30 21 * * * myCommand
# 每月1、10、22日的4 : 45执行
45 4 1,10,22 * * myCommand
# 每周六、周日的1 : 10执行
10 1 * * 6,0 myCommand
# 每天18 : 00至23 : 00之间每隔30分钟执行
0,30 18-23 * * * myCommand
# 每星期六的晚上11 : 00 pm执行
0 23 * * 6 myCommand
# 每一小时执行
* */1 * * * myCommand
# 晚上11点到早上7点之间,每隔一小时执行
0 23-7 * * * myCommand

4. 延伸阅读