1. 背景
在开发中经常要用到定时任务的场景,有多种可选方案。
可选的方式有:
- (1) 使用Springboot 的 注解
- (2) 使用 linux 中的 crontab 工具。
2. 方式一:使用Springboot 的 注解执行“定时任务”
在 Springboot 项目中可以使用注解开始定时任务。
注解说明:
- @Configuration 声明配置,
- @EnableScheduling 表示 开启定时任务
- @Scheduled 注解用在方法上,后面跟上一个 cron 表达式参数表示 定时周期。
示例如下:
@Configuration //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 2.开启定时任务
public class SaticScheduleTask {
//3.添加定时任务
@Scheduled(cron = "0/5 * * * * ?")
//或直接指定时间间隔,例如:5秒
//@Scheduled(fixedRate=5000)
private void configureTasks() {
System.err.println("执行静态定时任务时间: " + LocalDateTime.now());
}
}
2. 方式二:使用 linux 的 craontab 工具
2.1 知识
工具型软件cron是一款类Unix的操作系统下的基于时间的任务管理系统。用户们可以通过cron在固定时间、日期、间隔下,运行定期任务(可以是命令和脚本)。
cron常用于运维和管理,但也可用于其他地方,如:定期下载文件和邮件。
cron该词来源于希腊语chronos(χρόνος),原意是时间。
2.2 组成
- crond 是一个用于执行周期命令的守护进程
- crontab 是一个操作管理 定时任务的工具
- cron 表达式 是一个字符串,描述定时任务的周期和动作。
下面再分别讲述。
2.3 crontab 命令
usage: crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
2.4 crontab 表达式 的格式
# 文件格式說明
# ┌──分鐘(0 - 59)
# │ ┌──小時(0 - 23)
# │ │ ┌──日(1 - 31)
# │ │ │ ┌─月(1 - 12)
# │ │ │ │ ┌─星期(0 - 6,表示从周日到周六)
# │ │ │ │ │
# * * * * * 用户名 被執行的命令
一些表达式示例:
# 每1分钟执行一次command
* * * * * command
# 每小时的第3和第15分钟执行
3,15 * * * * command
# 在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command
# 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
2.5 操作示例
添加或更新 crontab 中的命令
crontab -e
执行后,会进入 vim 编辑器,添加一条 cron 任务即可,比如编辑:
*/1 * * * * curl http://192.168.1.8:8080/run
查看有哪些定时任务
crontab -l
移除当前用户的creon任务
crontab -r
注意要先备份后再删除哦。
3. 扩展
5.参考:
https://zh.wikipedia.org/wiki/Cronhttps://www.jianshu.com/p/d93e2b177814
https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/