定时任务
crontab 命令被用来提交和管理用户的需要周期性执行的任务。
crontab 命令就是修改 /var/spool/cron
中的定时任务文件。
crontab 命令
参数 | 解释 | 示例 |
---|---|---|
-l | list 查看定时任务 | crontab -l |
-e | edit 编辑定时任务,建议手动编辑 | 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 的半点执行 |
/n | n 表示可以整除的数字,每隔 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