Skip to content

定时任务

crontab 命令被用来提交和管理用户的需要周期性执行的任务。

crontab 命令就是修改 /var/spool/cron 中的定时任务文件。

crontab 命令

参数解释示例
-llist 查看定时任务crontab -l
-eedit 编辑定时任务,建议手动编辑crontab -e
-i删除定时任务,提示用户确认删除,避免出错crontab -i
-r删除定时任务,移除/var/spool/cron/username 文件,全没了crontab -r
-u user指定用户执行任务,root 可以管理用户计划任务crontab -u aiguo -l

时间表示法:

特殊符号含义
*表示“每”的意思,如 00 23 cmd 表示每月每周每日的 23:00 整点执行
-表示时间范围分隔符,如 17-19,代表每天的 17、18、19 点
逗号,表示分割时段,如 30 17,18,19 * cmd 表示每天的 17、18、19 的半点执行
/nn 表示可以整除的数字,每隔 n 的单位时间,如每隔 10 分钟表示/10* cmd
sh
# 前5列是关于执行时间配置,最后1列是具体执行命令。
.----------------  (0 - 59)
|  .-------------  (0 - 23)
|  |  .----------  (1 - 31)
|  |  |  .-------  (1 - 12)
|  |  |  |  .---- 星期 (0 - 6) (星期日可为0或7)
|  |  |  |  |
*  *  *  *  * 执行的命令

# 示例
0 * * * *           每小时执行,每小时的整点执行
1 2 * * 4           每周执行, 每周周四凌晨2点1分执行
1 2 3 * *           每月执行,每月的3号的凌晨2点1分执行
1 2 3 4 *           每年执行,每年4月3日凌晨2点1分执行
1 2 * * 3,5         每周周3和周5的凌晨2点1分执行
* 13,14 * * 6,0     每周六,周日下午1点和2点的每一份中执行
0 9-18 * * 1-5      每周一到周五每天早上9点到下午6点整执行
*/10 * * * *        每隔10分钟执行一次任务
*7 * * * *          如果没法整除,定时任务则没有意义,可以自定制脚本控制频率

# 定时任务最小单位是分钟,想完成秒级任务,只能通过其他方式(编程语言)
# 前5列是关于执行时间配置,最后1列是具体执行命令。
.----------------  (0 - 59)
|  .-------------  (0 - 23)
|  |  .----------  (1 - 31)
|  |  |  .-------  (1 - 12)
|  |  |  |  .---- 星期 (0 - 6) (星期日可为0或7)
|  |  |  |  |
*  *  *  *  * 执行的命令

# 示例
0 * * * *           每小时执行,每小时的整点执行
1 2 * * 4           每周执行, 每周周四凌晨2点1分执行
1 2 3 * *           每月执行,每月的3号的凌晨2点1分执行
1 2 3 4 *           每年执行,每年4月3日凌晨2点1分执行
1 2 * * 3,5         每周周3和周5的凌晨2点1分执行
* 13,14 * * 6,0     每周六,周日下午1点和2点的每一份中执行
0 9-18 * * 1-5      每周一到周五每天早上9点到下午6点整执行
*/10 * * * *        每隔10分钟执行一次任务
*7 * * * *          如果没法整除,定时任务则没有意义,可以自定制脚本控制频率

# 定时任务最小单位是分钟,想完成秒级任务,只能通过其他方式(编程语言)

测试

sh
touch /home/task/test-crontab.txt

# 第1步:创建定时任务, 每 1 分钟执行一次定时任务A
[root@xxx]# crontab -e
# 写入【每分钟执行 date 写入到 /home/task/test-crontab.txt】
* * * * * date >> /home/task/test-crontab.txt

# 第2步:检查定时任务
[root@xxx]# crontab -l
* * * * * /usr/bin/echo "aiguo带你学习linux" >> /usr/local/study/helloaiguo.txt

# 第3步:可以检测文件内容
tail -f /usr/local/study/helloaiguo.txt

# 第4步:删除一个定时任务, 使用 crontab -e 直接删除(或者 \# 注释)第一步中添加的内容即可
touch /home/task/test-crontab.txt

# 第1步:创建定时任务, 每 1 分钟执行一次定时任务A
[root@xxx]# crontab -e
# 写入【每分钟执行 date 写入到 /home/task/test-crontab.txt】
* * * * * date >> /home/task/test-crontab.txt

# 第2步:检查定时任务
[root@xxx]# crontab -l
* * * * * /usr/bin/echo "aiguo带你学习linux" >> /usr/local/study/helloaiguo.txt

# 第3步:可以检测文件内容
tail -f /usr/local/study/helloaiguo.txt

# 第4步:删除一个定时任务, 使用 crontab -e 直接删除(或者 \# 注释)第一步中添加的内容即可

实际案例

bash
[root@pch1024 ~]# crontab -l
# 系统自带的定时任务
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1

# 测试定时任务:每分钟执行一次
# * * * * *    date >> /home/task/test.txt

# 每 30 分钟执行一次 auto-git-pull.sh
30 * * * *      sh /home/task/auto-git-pull.sh

# 获取 crontab 环境变量信息
# * * * * *    /usr/bin/env > /home/task/env.txt
[root@pch1024 ~]# crontab -l
# 系统自带的定时任务
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1

# 测试定时任务:每分钟执行一次
# * * * * *    date >> /home/task/test.txt

# 每 30 分钟执行一次 auto-git-pull.sh
30 * * * *      sh /home/task/auto-git-pull.sh

# 获取 crontab 环境变量信息
# * * * * *    /usr/bin/env > /home/task/env.txt
bash
# 进入目录
[root@pch1024 ~]# cd /home/task
# 创建脚本执行权限
[root@pch1024 task]# touch auto-git-pull.sh
# 授予脚本执行权限
[root@pch1024 task]# chmod +x auto-git-pull.sh
# 进入目录
[root@pch1024 ~]# cd /home/task
# 创建脚本执行权限
[root@pch1024 task]# touch auto-git-pull.sh
# 授予脚本执行权限
[root@pch1024 task]# chmod +x auto-git-pull.sh
bash
[root@pch1024 task]# cat auto-git-pull.sh
#!/bin/bash
# 脚本中涉及文件路径时写全局路径;
# 脚本执行要用到java或其他环境变量时,通过 `source` 命令引入环境变量,如:
# 环境变量
source /etc/profile

# 日志
echo  "$(date)  auto-git-pull 任务开始" >> /home/task/log.txt

# 进入 blog 仓库目录
cd /home/blog
git checkout gh-pages
git pull

# 进入 vscode 仓库目录
cd /home/vscode
git pull

# 日志
echo  "$(date)  auto-git-pull 任务完成" >> /home/task/log.txt

###################
[root@pch1024 task]# cat auto-git-pull.sh
#!/bin/bash
# 脚本中涉及文件路径时写全局路径;
# 脚本执行要用到java或其他环境变量时,通过 `source` 命令引入环境变量,如:
# 环境变量
source /etc/profile

# 日志
echo  "$(date)  auto-git-pull 任务开始" >> /home/task/log.txt

# 进入 blog 仓库目录
cd /home/blog
git checkout gh-pages
git pull

# 进入 vscode 仓库目录
cd /home/vscode
git pull

# 日志
echo  "$(date)  auto-git-pull 任务完成" >> /home/task/log.txt

###################

注意

bash
# 在三点的每分钟都会执行一次任务,也就是执行了60次
* 3 * * * command

# 每天3点执行一次某任务
0 3 * * * command
# 在三点的每分钟都会执行一次任务,也就是执行了60次
* 3 * * * command

# 每天3点执行一次某任务
0 3 * * * command

参考资料

༼ つ/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿̿◕ _◕ ༽つ/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿̿ ̿̿