您现在的位置是:首页 >学无止境 >Linux实操篇-时间日期类/定时任务调度网站首页学无止境

Linux实操篇-时间日期类/定时任务调度

蓝影铁哥 2025-07-10 12:01:04
简介Linux实操篇-时间日期类/定时任务调度

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

不懂点Linux,都不好意思和别人说自己是开发,所以一些基础的必须掌握,同样的也是面试高频。

以下文章不定时更新…
Linux基础篇
Linux实操篇
Linux定制篇

一、date、cal概念

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、date、cal实战

在 Linux 和 Unix 系统中,datecal 是两个常用的命令,它们分别用于显示和操作日期时间以及显示日历。以下是它们的详细介绍和用法:

1. date 命令

date 命令用于显示当前的日期和时间,或者以指定的格式设置日期和时间。

显示当前日期和时间

执行 date 命令时,默认输出当前系统的日期和时间,格式通常为:

$ date

示例输出:

Tue Dec 17 14:52:43 UTC 2024
自定义日期和时间格式

你可以通过 +FORMAT 来指定输出的格式,使用格式符号来定义你需要的日期和时间格式。

常用的格式符号:

  • %Y:年份(四位数)
  • %m:月份(两位数)
  • %d:日期(两位数)
  • %H:小时(24小时制,两位数)
  • %M:分钟(两位数)
  • %S:秒钟(两位数)
  • %A:星期的完整名称(如 Monday)
  • %a:星期的缩写(如 Mon)
  • %T:时间(等同于 %H:%M:%S

示例

$ date "+%Y-%m-%d %H:%M:%S"

输出:

2024-12-17 14:52:43
设置系统日期和时间

date 命令还可以用于设置系统日期和时间,通常需要管理员权限(sudo)。

示例

$ sudo date --set="2024-12-17 15:00:00"

这将系统时间设置为 2024 年 12 月 17 日 15:00:00。

显示 UTC 时间

你可以使用 -u 选项来显示 UTC(协调世界时)时间。

$ date -u

2. cal 命令

cal 命令用于显示日历。默认情况下,它会显示当前月份的日历。

显示当前月份的日历
$ cal

示例输出:

     December 2024
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
显示指定月份的日历

你可以通过指定月份(MM)来查看某个月的日历:

$ cal 12 2024

示例输出:

     December 2024
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
显示指定年份的全年日历

你可以通过指定年份来显示该年份的完整日历:

$ cal 2024

示例输出:

                                2024
       January               February               March
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  1  2  3  4  5  6  7  8  9 10 11 12 13 14
 7  8  9 10 11 12 13  9 10 11 12 13 14 15 16 17 18 19 20 21
14 15 16 17 18 19 20 16 17 18 19 20 21 22 23 24 25 26 27 28
21 22 23 24 25 26 27 23 24 25 26 27 28 29           29 30
28 29 30 31          30                                          
.
.
.
显示指定年份和月份的日历

如果你想查看某个年份和月份的日历,可以使用 cal 后接年份和月份:

$ cal 12 2024

输出类似于:

     December 2024
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
其他常用选项
  • -y:显示整年的日历。

    $ cal -y 2024
    
  • -3:显示当前月份及前后各一个月的日历。

    $ cal -3
    

总结:

  • date 命令:用于显示当前日期和时间,支持自定义格式,并可以设置系统日期和时间。
  • cal 命令:用于显示日历,支持显示某个月、某年,或者前后几个日期的日历。

这两个命令是 Linux 系统中常用的工具,可以帮助你快速查看和操作日期和时间,或者查阅日历信息。

三、定时任务调度概念

crond
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、定时任务调度实战

在 Linux 和 Unix 系统中,定时任务调度通常通过 cronat 命令来实现。下面我将详细介绍这两种方式,帮助你理解如何配置和管理定时任务。

1. cron 命令和 crontab 配置

cron 是 Linux 系统中最常用的定时任务调度工具,它可以根据预定的时间周期自动执行任务。cron 任务是通过配置 crontab 文件来管理的。

crontab 文件格式

crontab 文件中每行都代表一个定时任务,任务行的格式如下:

* * * * * /path/to/command
| | | | |  
| | | | +---- 星期几 (0 - 6) (星期日=0)
| | | +------ 月份 (1 - 12)
| | +-------- 日期 (1 - 31)
| +---------- 小时 (0 - 23)
+------------ 分钟 (0 - 59)
各个字段的含义:
  • 分钟(0 - 59):任务将在每小时的哪个分钟执行。
  • 小时(0 - 23):任务将在一天的哪个小时执行。
  • 日期(1 - 31):任务将在每月的哪一天执行。
  • 月份(1 - 12):任务在哪个月执行。
  • 星期几(0 - 6):任务将在每周的哪一天执行,07 代表星期天,1 代表星期一,以此类推。
使用 crontab 管理定时任务
  1. 查看当前的定时任务列表

    crontab -l
    
  2. 编辑定时任务

    crontab -e
    

    这将打开一个编辑器,让你修改或添加定时任务。

  3. 删除定时任务

    crontab -r
    
  4. 查看 crontab 的帮助文档

    man 5 crontab
    
常见的 cron 配置示例
  • 每分钟执行一次

    * * * * * /path/to/command
    
  • 每天凌晨 3 点执行

    0 3 * * * /path/to/command
    
  • 每小时的第 15 分钟执行

    15 * * * * /path/to/command
    
  • 每月 1 号凌晨 5 点执行

    0 5 1 * * /path/to/command
    
  • 每周一凌晨 2 点执行

    0 2 * * 1 /path/to/command
    
  • 每天的 9:30 AM 执行

    30 9 * * * /path/to/command
    
常见的 cron 特殊字符
  • *:代表任意值。
  • ,:分隔多个值。例如:1,2,3 表示第 1、2 和 3 个分钟。
  • -:表示范围。例如:1-5 表示从第 1 到第 5 个小时。
  • /:表示步长。例如:*/5 表示每 5 分钟。

2. at 命令

at 是另一个定时任务调度工具,用于在特定时间执行任务。与 cron 不同,at 用于一次性执行任务,而不是周期性任务。

基本用法
  • 执行一次性任务

    at 3:00 PM
    

    输入任务命令后,按 Ctrl+D 保存并退出,任务将在指定的时间执行。

  • 执行一次性任务(指定日期和时间)

    at 2024-12-18 10:00
    

    输入任务命令后,按 Ctrl+D 保存并退出,任务将在 2024 年 12 月 18 日上午 10 点执行。

  • 查看当前排队的任务

    atq
    
  • 删除一个任务

    atrm job_id
    

    其中 job_id 是你通过 atq 查看得到的任务 ID。

示例
  1. 指定日期和时间执行任务

    $ at 12:00 PM 2024-12-18
    at> /path/to/command
    at> <Ctrl+D>
    
  2. 指定相对时间执行任务

    $ at now + 1 hour
    at> /path/to/command
    at> <Ctrl+D>
    

    这个命令将在当前时间的一个小时后执行任务。

3. systemd 定时任务

对于使用 systemd 管理的系统(如大多数现代 Linux 发行版),你也可以使用 systemd 的定时器来调度任务。

创建 systemd 定时器
  1. 创建一个 service 单元文件,例如 /etc/systemd/system/myjob.service

    [Unit]
    Description=My Scheduled Job
    
    [Service]
    Type=oneshot
    ExecStart=/path/to/command
    
  2. 创建一个定时器单元文件,例如 /etc/systemd/system/myjob.timer

    [Unit]
    Description=Runs myjob.service every day at 3:00 AM
    
    [Timer]
    OnCalendar=*-*-* 03:00:00
    Unit=myjob.service
    
    [Install]
    WantedBy=timers.target
    
  3. 启动定时器

    sudo systemctl daemon-reload
    sudo systemctl enable myjob.timer
    sudo systemctl start myjob.timer
    
  4. 查看定时器状态

    sudo systemctl list-timers
    
  5. 停止定时器

    sudo systemctl stop myjob.timer
    

总结

  • cron:适用于周期性定时任务,通常用于每天、每周、每月等频率执行任务。
  • at:适用于单次执行的定时任务。
  • systemd 定时器:适用于现代 Linux 系统,提供更强大的调度能力,适合需要高度集成与管理的定时任务。

根据你的需求选择合适的工具来调度任务,如果你需要定期执行任务,cron 是最常用的工具;而如果是一次性的任务,可以使用 at,如果你使用的是 systemd 管理的系统,则可以使用 systemd 定时器。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。