简介
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
:-
,表示启动时运行一次 -
@yearly
:0 0 1 1 *
,每年运行一次(1月1号0点) -
@monthly
:0 0 1 * *
,每月运行一次(1号0点) -
@weekly
:0 0 * * 0
,每周日0点运行一次 -
@daily
:0 0 * * *
,每天0点运行一次 -
@hourly
:0 * * * *
,每小时运行一次
常用选项
查看当前的计划任务
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
常见问题
-
环境变量的问题
-
权限问题