您现在的位置是:首页 >学无止境 >Linux实操篇-时间日期类/定时任务调度网站首页学无止境
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 系统中,date
和 cal
是两个常用的命令,它们分别用于显示和操作日期时间以及显示日历。以下是它们的详细介绍和用法:
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 系统中,定时任务调度通常通过 cron
和 at
命令来实现。下面我将详细介绍这两种方式,帮助你理解如何配置和管理定时任务。
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):任务将在每周的哪一天执行,
0
或7
代表星期天,1
代表星期一,以此类推。
使用 crontab
管理定时任务
-
查看当前的定时任务列表:
crontab -l
-
编辑定时任务:
crontab -e
这将打开一个编辑器,让你修改或添加定时任务。
-
删除定时任务:
crontab -r
-
查看
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。
示例:
-
指定日期和时间执行任务:
$ at 12:00 PM 2024-12-18 at> /path/to/command at> <Ctrl+D>
-
指定相对时间执行任务:
$ at now + 1 hour at> /path/to/command at> <Ctrl+D>
这个命令将在当前时间的一个小时后执行任务。
3. systemd
定时任务
对于使用 systemd
管理的系统(如大多数现代 Linux 发行版),你也可以使用 systemd
的定时器来调度任务。
创建 systemd 定时器
-
创建一个 service 单元文件,例如
/etc/systemd/system/myjob.service
:[Unit] Description=My Scheduled Job [Service] Type=oneshot ExecStart=/path/to/command
-
创建一个定时器单元文件,例如
/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
-
启动定时器:
sudo systemctl daemon-reload sudo systemctl enable myjob.timer sudo systemctl start myjob.timer
-
查看定时器状态:
sudo systemctl list-timers
-
停止定时器:
sudo systemctl stop myjob.timer
总结
cron
:适用于周期性定时任务,通常用于每天、每周、每月等频率执行任务。at
:适用于单次执行的定时任务。systemd
定时器:适用于现代 Linux 系统,提供更强大的调度能力,适合需要高度集成与管理的定时任务。
根据你的需求选择合适的工具来调度任务,如果你需要定期执行任务,cron
是最常用的工具;而如果是一次性的任务,可以使用 at
,如果你使用的是 systemd
管理的系统,则可以使用 systemd
定时器。