Linux下Crontab语法详解

Linux下计划任务Crontab用法详解。

基本格式

1
2
* * * * * "command"
分 时 日 月 周 "执行某项任务"
  • 第一列表示分钟: 使用数字 0-59 表示
  • 第二列表示小时: 使用数字 0-23 表示
  • 第三列表示日期: 使用数字 1-31 表示
  • 第四列表示月份: 使用数字 1-12 表示
  • 第五列表示星期: 使用数字 0-7 表示, 0 和 7 均代表星期日
  • 第六列表示要执行的命令
1
* 表示每(分钟/小时/日期/月份/星期)

常规示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
* * * * * "sh /tmp/test.sh"
# 每分钟的0秒执行脚本: /tmp/test.sh
*/5 * * * * "sh /tmp/test.sh"
# 每隔五分钟执行脚本: /tmp/test.sh
00 */3 * * * "sh /tmp/test.sh"
# 每个三个小时的00分执行脚本: /tmp/test.sh
01 * * * * "sh /tmp/test.sh"
# 每小时的01分执行脚本: /tmp/test.sh
01,03,05 * * * * "sh /tmp/test.sh"
# 每小时的01/03/05分执行脚本: /tmp/test.sh
01-10 * * * * "sh /tmp/test.sh"
# 每小时的01-10分执行脚本: /tmp/test.sh
01-10 22,23 * * * "sh /tmp/test.sh"
# 每天的22/23点的01-10分执行脚本: /tmp/test.sh
01-10 10-15 * * * "sh /tmp/test.sh"
# 每天的10-15点的01-10分执行脚本: /tmp/test.sh
00 00 01-10 * * "sh /tmp/test.sh"
# 每个月的01-10号的00点00分执行脚本: /tmp/test.sh
00 00 * * 0 "sh /tmp/test.sh"
# 每周日的00点00分执行脚本: /tmp/test.sh
00 00 01 01 * "sh /tmp/test.sh"
# 指定01月01日00点00分执行脚本: /tmp/test.sh

Crontab命令常用参数

1
2
3
4
crontab 参数:
-u [user]: 对指定用户的crontab进行操作, 未指定默认为当前用户
-l: 查看指定用户的crontab
-e: 以vim方式编写crontab

Crontab文件保存目录

crontab文件保存路径: /var/spool/cron/;
以用户名的方式保存用户的crontab, 每个用户对应一个文件.

Crontab小技巧

更改时区后crontab执行时间不更改

如果服务器更新时区(更改时间)后, 需要重启/etc/init.d/crond, 否则可能会出现crontab执行时间错误的问题.

使用vim编辑器打开crontab编辑界面

1
2
echo "export EDITOR=/usr/bin/vim" >> .bashrc
source .bashrc

crontab执行命令时环境变量问题

crontab加引号执行为调用crontab内置环境变量执行命令,crontab变量如下:

1
2
3
4
5
6
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/ec2-user>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=ec2-user>
X-Cron-Env: <USER=ec2-user>

不加引号执行命令则需要写命令的绝对路径,

1
2
example:* * * * * /usr/bin/python test.py
example:* * * * * /bin/bash -c "uptime"