散装java 散装java
首页
  • Java基础
  • JVM
  • Java多线程
  • 知识点
  • 案例
  • Redis
  • RabbitMQ
  • Kafka
  • Elasticsearch
  • MySQL
  • Linux
  • Docker
  • Zookeeper
  • Nginx
  • Git
  • JMeter
  • Gradle
  • 常见BUG
  • 常见解决方案
  • 资源
  • 问答
💖支持
Gitee (opens new window)
首页
  • Java基础
  • JVM
  • Java多线程
  • 知识点
  • 案例
  • Redis
  • RabbitMQ
  • Kafka
  • Elasticsearch
  • MySQL
  • Linux
  • Docker
  • Zookeeper
  • Nginx
  • Git
  • JMeter
  • Gradle
  • 常见BUG
  • 常见解决方案
  • 资源
  • 问答
💖支持
Gitee (opens new window)
  • 运维导读
  • Linux

    • Linux系统根目录概述
    • Linux常用操作指令
    • Linux如何跑一个定时任务
    • Docker

      • Docker导读
      • 常用 Docker 指令
      • Docker Compose 安装
      • Docker Compose 常用指令
    • Zookeeper

      • Zookeeper集群搭建
    • Nginx

      • Windows下安装使用 Nginx
      • Nginx 配置负载均衡
    • Git

      • Git 清空提交记录
    • GitLab

      • docker compose 搭建gitlab私服
    • 运维
    • Linux
    散装java
    2024-01-10
    目录

    Linux如何跑一个定时任务

    # 在Linux如何跑一个定时任务

    我想要在服务器跑一个定时任务,比如,每天九点在钉钉给我发一个消息,这个能力应该怎么实现?

    这个问题,可以借助 crontab 来实现

    另外,如何实现发送到钉钉,可以参考钉钉官方的webhook文档 (opens new window),还是很简单的

    # crontab 是什么

    crontab是一个用于在Linux和Unix操作系统上定时执行任务的工具。它可以在指定的时间自动执行计划任务,是一种很常用的自动化工具。crontab是cron table的缩写,cron是Unix或类Unix系统的计划任务管理器。

    ps:在大多数 Linux 发行版中,crontab 已经是系统自带的工具,无需额外下载;如果你服务器上没有,可以通过 yum install cronie 进行安装

    # 实现

    这里我通过一个crontab 任务来实现了,每天九点往钉钉机器人往群里发送一条消息

    0 9 * * * /usr/bin/curl -H "Content-Type: application/json" -d '{"msgtype": "text","at":{"isAtAll":true},"text": {"content":"茅!茅!茅!"}}' https://oapi.dingtalk.com/robot/send\?access_token=66666692a55a9ceb6a0d1191d481ef81913b0cbed3f2b40c421d2b3eff6666
    
    1

    ps 这里的推送链接,是通过上面文档的方式生成的,每个群的都不一样,需要自己去生成

    # crontab 语法

    语法:crontab[-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]

    # 时间表达式语法

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    1
    2
    3
    4
    5
    6
    7
    8
    • minute: 表示分钟,可以是从0到59之间的任何整数。
    • hour:表示小时,可以是从0到23之间的任何整数。
    • day:表示日期,可以是从1到31之间的任何整数。
    • month:表示月份,可以是从1到12之间的任何整数。
    • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
    • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

    特殊字符:

    • 星号(*):代表每的意思,例如month字段如果是星号,则表示每月都执行该命令操作。
    • 逗号(,):表示分隔时段的意思,例如,“1,3,5,7,9”。
    • 中杠(-):表示一个时间范围,例如“2-6”表示“2,3,4,5,6”。
    • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

    # 1. 创建任务

    该命令用于创建一个新的定时任务,也可以编辑已有的任务,在编辑模式下,输入对应的时间和任务命令即可添加任务

    crontab -e
    
    1

    # 2. 查看定时任务列表

    crontab -l
    
    1

    # 3. 清空任务列表

    该命令用于清空当前用户的所有定时任务列表。

    crontab -r
    
    1

    在删除当前用户的crontab任务时提示确认

    crontab -i
    
    1

    # 配置文件

    # 全局配置文件

    在/etc目录下面存在

    1. cron.hourly、cron.daily、cron.weekly、cron.monthly、cron.d五个目录
    2. crontab,cron.deny二个文件
    • cron.daily 是每天执行一次的job
    • cron.weekly 是每个星期执行一次的job
    • cron.monthly 是每月执行一次的job
    • cron.hourly 是每个小时执行一次的job
    • cron.d 是系统自动定期需要做的任务
    • crontab 是设定定时任务执行文件
    • cron.deny 文件就是用于控制不让哪些用户使用Crontab的功能

    # crontab文件

    cron 的主配置文件是 /etc/crontab,它包括下面几行:

    [root@bulk ~]# cat  /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    解释:

    前三行是用来配置 cron 任务运行环境的变量。

    • SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);
    • PATH 变量定义用来执行命令的路径。
    • MAILTO cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。 如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。

    # cron.allow 和 cron.deny文件

    /etc/cron.allow和 /etc/cron.deny 文件被用来限制对 cron 的使用。

    注意:

    1. 这两个使用控制文件的格式都是每行一个用户。
    2. 两个文件都不允许空格。
    3. 如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。
    4. 使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
    5. 无论使用控制文件中的规定如何,root 都总是可以使用 cron。
    6. 如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
    7. 如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。
    8. 如果两个文件都不存在,只有root可以提交任务

    # crontab 服务启动与关闭

    service crond start     #启动服务
    service crond stop      #关闭服务
    service crond restart   #重启服务
    service crond reload    #重新载入配置
    service crond status    #查看crontab服务状态
    
    1
    2
    3
    4
    5
    上次更新: 2024/01/10, 16:39:58
    Linux常用操作指令
    Docker导读

    ← Linux常用操作指令 Docker导读→

    Theme by Vdoing | Copyright © 2022-2024 散装java | MIT License | 鲁ICP备2022022143号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式