头图

简介

crontab 命令用于在类 Unix 操作系统上安排任务在特定时间或间隔运行。这些任务通常称为 cron jobs,由 cron 守护程序 (crond) 管理。

基本语法

# 普通用户
<minute> <hour> <day> <month> <weekday> <command>

# 系统范围的
<minute> <hour> <day> <month> <weekday> <user> <command>
例如:30 2 * * * root /usr/bin/apt update

图解

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (0是星期天)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

# 单个 * 表示每分钟/小时/月 ...都要执行,以此类推
# 当 * 为:a-b,表示从第a分钟/小时/月 ... 到第b分钟/小时/月 ... 都要执行,以此类推
# 当 * 为:*/n,表示每n分钟/小时/月 ... 的时间间隔执行一次,以此推类
# 当 * 为a,b,c,... ,表示第a,b,c,... 分钟/小时/月 ... 执行,以此类推

字段解释

  • minute:命令运行的分钟数,取值范围:0-59
  • hour:命令运行的小时数,取值范围:0-23
  • day:命令运行的月份日期,取值范围:1-31
  • month:命令运行的月份,取值范围:1-12或jan-dec
  • weekday:星期几,取值范围:0-7或sun-sat
  • command:要执行的命令

预定义的字符串指令

  • @reboot-,表示启动时运行一次
  • @yearly0 0 1 1 * ,每年运行一次(1月1号0点)
  • @monthly0 0 1 * * ,每月运行一次(1号0点)
  • @weekly0 0 * * 0 ,每周日0点运行一次
  • @daily0 0 * * * ,每天0点运行一次
  • @hourly0 * * * * ,每小时运行一次

常用选项

查看当前的计划任务

crontab -l

编辑当前的计划任务

# 会启动环境变量配置的默认编辑器打开文件,例如:vim或nano
crontab -e

移除当前用户的所有计划任务

crontab -r

设置指定用户的计划任务

# 前提是要有此用户的权限
crontab -u <username>

示例用法

每天凌晨 2:30 运行脚本

30 2 * * * /path/to/script.sh

每个星期五下午5点运行命令

0 17 * * 5 /path/to/command

每10分钟运行一次命令

*/10 * * * * /path/to/command

仅在1月和6月1号0点运行命令

0 0 1 1,6 * /path/to/command

每分钟执行一次命令

* * * * * /bin/ls

在12月内, 每天的早上6点到12点,每隔3个小时执行一次备份任务

0 6-12/3 * 12 * /usr/bin/backup

重定向输出到垃圾桶

0 0 * * * /path/to/script.sh > /dev/null 2>&1

输出记录到日志文件

0 0 * * * /path/to/script.sh >> /var/log/script.log 2>&1

查看 cron 日志

查看以下两个文件
  • /var/log/cron
  • /var/log/syslog

常见问题

  • 环境变量的问题
  • 权限问题

唐青枫
12 声望2 粉丝