1、定义

Cron表达式是一种用于定义定时任务的格式化字符串。它被广泛用于Unix、Linux和类Unix系统中,用于在指定的时间执行预定的任务。Cron表达式由6个字段组成,每个字段通过空格分隔开。

在本文中,我们将学习如何理解和编写Cron表达式。

Cron表达式的格式如下:

* * * * * *
| | | | | |
| | | | | +-- 星期(周日=0 或 7)
| | | | +---- 月份(1-12)
| | | +------ 日期(1-31)
| | +-------- 小时(0-23)
| +---------- 分钟(0-59)
+------------ 秒(0-59)

每个字段可以使用数字来表示具体的值,也可以使用一些特殊字符来表示范围、递增等。

下面是一些常用的特殊字符:

:代表所有可能的值,例如在小时字段中表示每一个小时。

?:在日期和星期字段中,表示不指定值。

-:表示范围,例如在小时字段中1-3表示1点到3点。

,:表示列举值,例如在小时字段中1,3,5表示1点、3点和5点。

/:表示递增,例如在分钟字段中*/15表示每15分钟。

下面是一些示例Cron表达式:

1)每分钟的第30秒执行任务:

30 * * * * *

2)每小时的第30分钟执行任务:

* 30 * * * *

3)每天的凌晨1点执行任务:

0 1 * * *

4)每月的第1天的凌晨1点执行任务:

0 1 1 * *

5)每周一的凌晨1点执行任务:

0 1 * * 1

以上只是Cron表达式的一些基本示例,你可以根据自己的需求灵活组合各个字段来定义复杂的定时任务。需要注意的是,Cron表达式的具体语法和支持的特殊字符可能因不同的系统或工具而有所差异,因此在实际使用时最好查阅相关文档进行参考。

2、.NET代码举例

以下是一个使用.NET代码的例子,演示如何创建和执行一个Cron表达式。

首先,你需要安装一个用于解析和执行Cron表达式的.NET库。常用的库是NCrontab和Quartz,你可以通过NuGet包管理器将其添加到你的项目中。

安装完成后,你可以使用以下代码创建一个Cron表达式,并生成一个对应的定时任务。

1)NCrontab

1、安装NCrontab库

2、NCrontabUtil工具类

/// <summary>
/// NCrontab解析Cron表达式
/// 不支持秒级
/// </summary>
public static class NCrontabUtil
{
/// <summary>
/// 执行NCrontab解析
/// </summary>
/// <param name="cronExpression">Cron表达式</param>
public static void ExecuteNCrontab(string cronExpression)
{
// 解析Cron表达式
CrontabSchedule schedule = CrontabSchedule.Parse(cronExpression); // 获取当前时间
DateTime currentTime = DateTime.Now; // 计算下一个执行时间
DateTime nextOccurrence = schedule.GetNextOccurrence(currentTime); Console.WriteLine("下一个执行时间:" + nextOccurrence.ToString()); // 在下一个执行时间执行任务
// 这里只是简单打印一条消息作为示例任务
Action task = () => Console.WriteLine("执行任务...");
task.Invoke();
}
}

3、调用

// 创建一个Cron表达式
string cronExpression = ""; // NCrontab 不支持秒级
// 在每小时的第一分钟执行任务。这个表达式具体表示在每小时的第一分钟(例如01:01、02:01、03:01等)触发执行相应的任务
// 其他字段的值使用星号()表示,意味着对应字段的所有可能值都被匹配,即任务在每个小时都会执行
cronExpression = "1 * * * *";
NCrontabUtil.ExecuteNCrontab(cronExpression);

4、结果

2)Quartz(推荐使用,支持6为表达式->支持秒级)

1、安装Quartz库

2、QuartzUtil工具类

/// <summary>
/// Quartz解析Cron表达式
/// 支持秒级
/// </summary>
public static class QuartzUtil
{
/// <summary>
/// 执行Quartz解析
/// </summary>
/// <param name="cronExpression">Cron表达式</param>
public async static void ExecuteQuartz(string cronExpression)
{
// 创建调度器工厂
var schedulerFactory = new StdSchedulerFactory();
// 获取调度器 .ConfigureAwait(false)避免死锁,下同
var scheduler = await schedulerFactory.GetScheduler().ConfigureAwait(false);
// 开启调度器
await scheduler.Start().ConfigureAwait(false);
// 创建作业
var job = JobBuilder.Create<MyJob>()
.WithIdentity("myJob")
.Build();
// 创建触发器,并设置CRON表达式
var trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger")
.WithCronSchedule(cronExpression)
.Build(); // 将作业和触发器关联到调度器中
await scheduler.ScheduleJob(job, trigger).ConfigureAwait(false); // 保持主程序的运行,以便调度器持续执行任务
Console.WriteLine("Press any key to exit...");
Console.ReadKey(); // 关闭调度器
await scheduler.Shutdown().ConfigureAwait(false);
} // 创建作业类
public class MyJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
// 在这里编写每秒要执行的代码
if (context.NextFireTimeUtc.HasValue)
{
Console.WriteLine("执行任务中...下一次执行任务时间" + context.NextFireTimeUtc.Value.ToLocalTime().DateTime.ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
Console.WriteLine("执行任务中...下一次执行任务时间未知");
}
await Task.CompletedTask;
}
}
}

3、调用

// 创建一个Cron表达式
string cronExpression = ""; // Quartz 支持秒级
// 每秒执行一次的CRON表达式
cronExpression = "0/1 * * * * ?";
QuartzUtil.ExecuteQuartz(cronExpression);

4、结果

希望本文能帮助你学会理解和编写Cron表达式,以便在系统中实现定时任务的自动化执行。

一篇学会cron表达式的更多相关文章

  1. 基于Spring的最简单的定时任务实现与配置(三)--番外篇 cron表达式的相关内容

    本来这篇文章是会跟本系列的前两篇文章一起发布的.但是,昨天在找资料总结的时候遇到了一点意外,就延后了一些. 本篇的内容主要参考了 这篇博文:http://www.cnblogs.com/junrong ...

  2. 作业调度框架 Quartz 学习笔记(三) -- Cron表达式 (转载)

    前面两篇说的是简单的触发器(SimpleTrigger) , SimpleTrigger 只能处理简单的事件出发,如果想灵活的进行任务的触发,就要请出 CronTrigger 这个重要人物了. Cro ...

  3. Quartz.net的cron表达式

    写在前面 前面有一篇文章用到了quartz.net,在设置定时时间的时候,使用了cron表达式,这里记录几种常见设置方式,方便对照使用. 详情 在这篇文章:Quartz.Net在windows服务中的 ...

  4. Java EE学习——Quartz的Cron表达式

    经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比 ...

  5. Quartz.net 定时任务之Cron表达式

    一.cron表达式简单介绍和下载 1.在上一篇博客"Quartz.net 定时任务之简单任务"中,我简单介绍了quartz的使用,而这篇博客我将介绍cron的具体使用(不足之处望大 ...

  6. Cron表达式详解和表达式的验证

    本篇不算原创,因为主要内容来自网上的博客,所以给出我参考文章的链接. 本文cron表达式详解的大部分内容参考了[cron表达式详解]和Quartz使用总结.Cron表达式 这两篇文章. cron校验的 ...

  7. .net core 实现基于 cron 表达式的任务调度

    .net core 实现基于 cron 表达式的任务调度 Intro 上次我们实现了一个简单的基于 Timer 的定时任务,详细信息可以看这篇文章. 但是使用过程中慢慢发现这种方式可能并不太合适,有些 ...

  8. 根据Cron表达式,通过Spring自带的CronSequenceGenerator类获取下次执行时间

    Cron表达式通常用于执行一些定时任务,在本篇文章中,暂时不会记录如何根据Cron表达式来执行一些定时任务.本章主要的目的是根据Cron表达式,通过Spring自带的CronSequenceGener ...

  9. Cron表达式,springboot定时任务

    详细请看这篇博客 参考:https://blog.csdn.net/belonghuang157405/article/details/83410197 Cron表达式是一个字符串,字符串以5或6个空 ...

  10. quartz.net 时间表达式----- Cron表达式详解

    序言 Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无 ...

随机推荐

  1. ATtiny88初体验(二):呼吸灯

    ATtiny88初体验(二):呼吸灯 前面的"点灯"实验实现了间隔点亮/熄灭LED,但是间隔时间和亮度都没法控制,为了解决这个问题,可以使用ATtiny88的定时器模块. ATti ...

  2. ETL之apache hop系列4-hop开发数据增量同步功能

    ETL增量数据抽取CDC 概念:Change Data Capture,变化的数据捕获,也称:[增量数据抽取](名词解释) CDC是一种实现数据的增量抽取解决方案,是实现[ETL整体解决方案]中的一项 ...

  3. Leetcode刷题笔记——单调性

    单调性 单调性是数学中使用的一种常见性质,通常用于描述函数,在高等数学中的定义常常为: 设函数f(x)在区间I上有定义,如果对于I上的任意两个数x1和x2,当x1<x2时,有f(x1)<f ...

  4. OpenLDAP服务器搭建

    一.关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# systemctl d ...

  5. 重磅| Falcon 180B 正式在 Hugging Face Hub 上发布!

    引言 我们很高兴地宣布由 Technology Innovation Institute (TII) 训练的开源大模型 Falcon 180B 登陆 Hugging Face! Falcon 180B ...

  6. MinIO分布式部署

    目录 先决条件 网络和防火墙 网络 防火墙 负载均衡 顺序的主机名 驱动器要求 XFS格式性能最优 最小IO 顺序的驱动器名 任意迁移 时间同步 考虑 相同的硬软件环境 存储容量规划 推荐的操作系统 ...

  7. 从内核世界透视 mmap 内存映射的本质(原理篇)

    本文基于内核 5.4 版本源码讨论 之前有不少读者给笔者留言,希望笔者写一篇文章介绍下 mmap 内存映射相关的知识体系,之所以迟迟没有动笔,是因为 mmap 这个系统调用看上去简单,实际上并不简单, ...

  8. 用Rust手把手编写一个Proxy(代理), 动工

    用Rust手把手编写一个Proxy(代理), 动工 项目 ++wmproxy++ gitee 传送门 github 传送门 设计流程图 flowchart LR A[客户端] -->|Http| ...

  9. 使用mtrace追踪JVM堆外内存泄露

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 简介 在上篇文章中,介绍了使用tcmalloc或jemalloc定位native内存泄露的方法,但使用这个方法相 ...

  10. Django框架——forms组件、cookie与session

    文章目录 1 forms 组件 1 校验字段功能 2 渲染标签功能 渲染方式1 渲染方式2 渲染方式3 3 渲染错误信息功能 视图 模板 4 组件的参数配置 5 局部钩子 6 全局钩子 2 cooki ...