• 定时任务(干货版)


    场景:有时需要临时统计线上的数据,然后导出到 Excel 表格中。这种需求有时较为复杂,光靠写 SQL 语句是无法满足需求的,这就需要写 Java 代码了。然后将该程序打成一个 Jar 包,在线上环境执行,最后将生成的 Excel 文件下载到本地。

    为了减小对线上环境的影响,我们一般会选择在凌晨 1-2 点 ,趁用户量少的时候,执行统计程序。由于时间太晚了,我们完全没必要守在那里等执行结果,一个定时任务就能可以搞定。那么,这种情况用哪种定时任务更合适呢?

    答案是: Linux 系统的 crontab 运行 crontab -e ,可以编辑定时器,然后加入如下命令:

    0 2 * * * /jdk1.8/bin/java -jar /data/app/tool.jar > /logs/tool.log &
    
    • 1

    就可以在 每天凌晨 2 点 ,定时执行 tool.jar 程序,并且把日志输出到 tool.log 文件中。当然你也可以把后面的执行 Java 程序的命令写成 Shell 脚本,更方便维护

    使用这种定时任务支持方便修改定时规则,有界面可以统一管理配置的各种定时脚本

    crontab 命令的基本格式如下:

    crontab [参数] [文件名]
    
    • 1

    参数功能对照表如下:

    参数功能
    -u指定用户
    -e编辑某个用户的 crontab 文件内容
    -l显示某个用户的 crontab 文件内容
    -r删除某用户的 crontab 文件
    -i删除某用户的 crontab 文件时需确认

    以上参数,如果没有使用 -u 指定用户,则默认使用的当前用户

    通过 crontab -e 命令编辑文件内容,具体语法如下:

    [] [小时] [日期] [] [星期] 具体任务
    
    • 1

    其中:

    • 分,表示多少分钟,范围:0 - 59
    • 小时,表示多少小时,范围:0 - 23
    • 日期,表示具体在哪一天,范围:1 - 31
    • 月,表示多少月,范围:1 - 12
    • 星期,表示多少周,范围:0 - 7,0 和 7 都代表星期日

    还有一些特殊字符,比如:

    • * 代表任何时间,比如:*1*** 表示每天凌晨 1 点执行

    • / 代表每隔多久执行一次,比如: */5**** 表示每隔 5 分钟执行一次

    • , 代表支持多个,比如: 10 7,9,12 *** 表示在每天的 7、9、12 点 10 分各执行一次

    • - 代表支持一个范围,比如: 10 7-9 *** 表示在每天的 7、8、9 点 10 分各执行一次

    crontab 需要 crond 服务支持, crond 是 Linux 下用来周期地执行某种任务的一个守护进程,在安装 Linux 操作系统后,默认会安装 crond 服务工具,且 crond 服务默认就是自启动的。 crond 进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务

    可以通过以下命令操作相关服务:

    service crond status   // 查看运行状态
    service crond start    // 启动服务
    service crond stop     // 关闭服务
    service crond restart  // 重启服务
    service crond reload   // 重新载入配置
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用 crontab 的优缺点:

    • 优点:方便修改定时规则,支持一些较复杂的定时规则,通过文件可以统一管理配好的各种定时脚本。
    • 缺点:如果定时任务非常多,不太好找,而且必须要求操作系统是 Linux ,否则无法执行
  • 相关阅读:
    python 基础知识点(蓝桥杯python科目个人复习计划63)
    【LC简单】704. 二分查找
    基于51单片机电子钟温度计数码显示设计( proteus仿真+程序+设计报告+讲解视频)
    python:切分多个串联但单个内部按大小排列数据列表
    论文阅读U-KAN Makes Strong Backbone for MedicalImage Segmentation and Generation
    Postman接口调用api
    基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
    CANoe-vTESTstudio之Waveform编辑器
    k8s ingress
    matlab 矩阵逆运算的条件数
  • 原文地址:https://blog.csdn.net/weixin_41835916/article/details/126291887