NCrontab:实践指南
真正理解NCrontab,要从它处理的任务开始:.NET 的 Crontab。一旦进入日常自动化环节,输入边界、依赖和失败处理如果不清楚就很难稳定复用会直接影响交付,这也是我最关心的风险。我的评估方法是用一项范围明确的真实任务完成最小试跑,然后检查配置时间、输出质量、异常信息和维护痕迹是否与文档一致。它更像给愿意先做小范围验证并复查原始文档的团队准备的可审查方案,是否长期使用应由试跑数据决定。
NCrontab:.NET 的 Crontab
![Build Status][build-badge] ![NuGet][nuget-badge]
NCrontab 是一个针对 .NET 标准库 1.0 的库, 有助于:
- crontab 表达式的解析
- crontab 表达式的格式
- 根据 crontab 计划计算出现的时间
它_不_提供任何调度程序,或者不是像 cron 这样的调度工具 Unix 平台。它提供的是解析、格式化和算法 根据 crontab 中表示的给定时间表生成时间的出现 格式:
* * * * *
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 6)(星期日=0)
| | | +-------- 月份 (1 - 12)
| | +--------- 一个月中的某一天 (1 - 31)
| +------------ 小时 (0 - 23)
+------------- 分钟 (0 - 59)
或允许几秒钟的六部分格式:
* * * * * *
- - - - - -
| | | | | |
| | | | | +--- 星期几 (0 - 6)(星期日=0)
| | | | +----- 月份 (1 - 12)
| | | +-------- 一个月中的某一天 (1 - 31)
| | +--------- 小时 (0 - 23)
| +------------ 分钟 (0 - 59)
+------------- 秒 (0 - 59)
上面值字段中的星号 (*) 表示括号中的所有合法值
那个专栏。因此,值字段可以具有 * 或元素列表
用逗号分隔。元素可以是上面显示的范围内的数字,也可以是
该范围内的两个数字由连字符分隔(表示包含范围)。对于
更多,请参见CrontabExpression。
时间表示例:
| 表达 | 描述 |
|---|---|
<em> </em> <em> </em> * |
每分钟 |
0 <em> </em> <em> </em> |
每小时 |
0 0 <em> </em> * |
每天半夜 |
0 9 <em> </em> Mon-Fri |
工作日 9 AM |
0 0 1 <em> </em> |
每个月的第一天 |
0 <em>/6 </em> <em> </em> |
每 6 小时 |
0 9-17 <em> </em> * |
从 9 AM 到 5 PM 每小时 |
安装
使用以下命令将包添加到您的 .NET 项目中:
dotnet add package NCrontab
快速入门
using NCrontab;
var schedule = CrontabSchedule.Parse("0 12 * * Mon"); // Every Monday at noon
var next = schedule.GetNextOccurrence(DateTime.Now);
请注意,传递给 GetNextOccurrence 的开始时间是_独占_,因此如果
开始时间正好是预定的发生时间,下一个发生时间将是
之后的一张。这种设计允许您提供 GetNextOccurrence 的结果
返回自身以获取后续事件,例如,作为循环的一部分。
CrontabSchedule.Parse 解析的默认格式是由五部分组成的 cron
格式。为了使用包含秒的六部分格式,请传递
CrontabSchedule.ParseOptions 至 Parse,其中 IncludingSeconds 设置为
true。例如:
var s = CrontabSchedule.Parse("0,30 * * * * *",
new CrontabSchedule.ParseOptions
{
IncludingSeconds = true
});
获取出现次数
CrontabSchedule.GetNextOccurrences 生成时间表的出现。的
以下示例:
using System;
using NCrontab;
var s = CrontabSchedule.Parse("0 12 * */2 Mon"); // Monday of every other month
var start = new DateTime(2000, 1, 1); // Starting January 1, 2000
var end = start.AddYears(1); // Through the year 2000
var occurrences = s.GetNextOccurrences(start, end);
Console.WriteLine(string.Join(Environment.NewLine,
from t in occurrences
select $"{t:ddd, dd MMM yyyy HH:mm}"));
将打印时间表 0 12 * */2 Mon 的出现次数(即 12:00 PM
每隔一个月的星期一),从 2000 年 1 月开始一直到这一年
年份:
Mon, 03 Jan 2000 12:00
Mon, 10 Jan 2000 12:00
Mon, 17 Jan 2000 12:00
Mon, 24 Jan 2000 12:00
Mon, 31 Jan 2000 12:00
Mon, 06 Mar 2000 12:00
Mon, 13 Mar 2000 12:00
Mon, 20 Mar 2000 12:00
Mon, 27 Mar 2000 12:00
Mon, 01 May 2000 12:00
Mon, 08 May 2000 12:00
Mon, 15 May 2000 12:00
Mon, 22 May 2000 12:00
Mon, 29 May 2000 12:00
Mon, 03 Jul 2000 12:00
Mon, 10 Jul 2000 12:00
Mon, 17 Jul 2000 12:00
Mon, 24 Jul 2000 12:00
Mon, 31 Jul 2000 12:00
Mon, 04 Sep 2000 12:00
Mon, 11 Sep 2000 12:00
Mon, 18 Sep 2000 12:00
Mon, 25 Sep 2000 12:00
Mon, 06 Nov 2000 12:00
Mon, 13 Nov 2000 12:00
Mon, 20 Nov 2000 12:00
Mon, 27 Nov 2000 12:00
合并时间表
NCrontab 可以合并一个或多个计划的_不同_时间线。这个可以 有时当无法用一个单一的表达时间表时会派上用场 crontab 表达式如_每 6 小时从 9 AM 到 5 PM,在工作日,但在 周末中午_。将其分为两个时间表:
0 12 * * Sat-Sun:周末中午0 9-17/6 * * Mon-Fri:工作日9点AM到5点PM每6小时一班
您可以将它们合并以生成单个时间线:
using System;
using NCrontab;
var start = new DateTime(2000, 1, 1);
var end = start.AddYears(1);
var schedules = new[]
{
CrontabSchedule.Parse("0 12 * * Sat-Sun"),
CrontabSchedule.Parse("0 9-17/6 * * Mon-Fri")
};
var occurrences = schedules.GetNextOccurrences(start, end);
Console.WriteLine(string.Join(Environment.NewLine,
from t in occurrences
select $"{t:ddd, dd MMM yyyy HH:mm}"));
运行的输出将:
Sat, 01 Jan 2000 12:00
Sun, 02 Jan 2000 12:00
Mon, 03 Jan 2000 09:00
Mon, 03 Jan 2000 12:00
Mon, 03 Jan 2000 15:00
Tue, 04 Jan 2000 09:00
Tue, 04 Jan 2000 12:00
Tue, 04 Jan 2000 15:00
Wed, 05 Jan 2000 09:00
Wed, 05 Jan 2000 12:00
Wed, 05 Jan 2000 15:00
Thu, 06 Jan 2000 09:00
Thu, 06 Jan 2000 12:00
Thu, 06 Jan 2000 15:00
Fri, 07 Jan 2000 09:00
Fri, 07 Jan 2000 12:00
Fri, 07 Jan 2000 15:00
Sat, 08 Jan 2000 12:00
Sun, 09 Jan 2000 12:00
...
如果两个或多个计划产生相同的事件,则只有其中一个发生 被返回。
本产品包含由OpenSymphony Group开发的软件。
-
09.12
gptrpg:AI Agent 工具实践指南
-
09.12
jasp-desktop:实践指南
-
09.12
NCrontab:实践指南
-
09.12
QT-PyQt-PySide-Custom-Widgets:实践指南
-
09.12
picosnitch:实践指南
-
09.12
database:实践指南
-
- database:实践指南
- 09.12
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏