.NET平臺開源項目速覽(21)Cron任務調度CronNET

若是用知乎,能夠關注專欄:.NET開源項目PowerBI社區html

Quartznet大名鼎鼎應該不多有人不知道,相關的開源項目不少,不過那東東對新手來講,有點晦澀,加上哪一個Cron表達式,可能一進去雲裏霧裏的。今天給你們介紹一個簡單的在.NET平臺上運行Cron計劃任務的組件CronNET。同時也給你們推介幾個Cron表達式的工具。linux

本文原文地址:.NET平臺開源項目速覽(21)Cron任務調度CronNETgit

1.Cron介紹和工具

  cron是一個linux下的定時執行工具,能夠在無需人工干預的狀況下運行做業。cron服務器能夠根據配置文件約定的時間來執行特定的做務。因此其餘組件和平臺根據其語法作了支持,就有了各類各樣的語言版本。Cron的語法表達式很是靈活,也很是複雜,不過不建議你們一次性擼進去出不來,須要用到的時候用下面幾個工具查一下,生成就好。慢慢就理解了,固然簡單主要的語法看得懂就行,抄來抄去就會了。github

  若是要了解Cron語法,能夠看下面這篇文章,很是簡潔和全面:Cron表達式express

  下面給你們介紹2個好用的Cron工具:c#

1.在線Cron表達式生成器:http://cron.qqe2.com/ 。配置至關全面,能夠把你想要執行的任務直接圖形化界面配置出來,獲得Cron表達式。也能夠反解析到UI,以下圖:windows

2.Cron表達式解析組件:https://github.com/bradymholt/cron-expression-descriptor,能夠將Cron表達的轉換爲天然語言,支持不少語言,包括中文。重點包括了中文服務器

看看第3部分咱們的演示。ide

2.CronNET介紹和使用

  CronNET是一個簡單的C#類庫,用來執行Cron表達式定義的計劃任務。它支持絕大部分Cron表達式,看測試下面的代碼,很是全面了。並且整個下面短小精悍,總過不過110行代碼。因此集成到本身的項目中去也很是容易。函數

Github地址:https://github.com/kevincolyar/CronNET

下面咱們經過一段簡單的代碼來看看效果和使用。本身下面源代碼編譯dll,引用命名空間 using CronNET

2.1 基本使用

  定義一個全局的CronDaemon對象,用來存儲Job,在main函數中添加cron任務,我添加了一個每分鐘執行的任務,任務的內容就是打印個日誌。

private static CronDaemon cron_daemon = new CronDaemon();

static void Main(string[] args)
{
	cron_daemon.AddJob("* * * * *", MiniteTask);
	Console.WriteLine("任務開始時間:{0}", DateTime.Now.ToLongTimeString());
	cron_daemon.Start();
	while (true) Thread.Sleep(6000);
}

static void MiniteTask()
{
	Console.WriteLine("{0}:定時任務執行",DateTime.Now.ToLongTimeString());
}

看看執行結果,每分鐘都執行了一次:

2.2 Windows服務

下面咱們看看在windows服務中怎麼使用,起始原理差很少,Github裏面有一個windows服務的例子,不過我通常比較喜歡用XAgent來完成。

class MyService : AgentServiceBase<MyService>
{
	//Job
	private static CronDaemon cron_daemon = new CronDaemon();
	internal static void MiniteTask()
	{
		XTrace.WriteLine("{0}:定時任務執行", DateTime.Now.ToLongTimeString());
	}
	public MyService()
	{
		//設置服務名稱和描述,以及線程數
		DisplayName = "CronTestService";
		Description = "CronTestService";
		ThreadCount = 0;
		cron_daemon.AddJob("* * * * *", MiniteTask);//添加job
	}
	/// <summary>服務啓動</summary>
	/// </remarks>
	protected override void StartWork(String reason)
	{
		XTrace.WriteLine("任務開始時間:{0}", DateTime.Now.ToLongTimeString());
		cron_daemon.Start();//啓動
		base.StartWork(reason);
	}
	/// <summary>服務中止</summary>
	protected override void StopWork(String reason)
	{
		base.StopWork(reason);
	}
}

XAgent是一個快速,圖形化界面的Windows服務工具,集成在Newlife組件中。使用能夠參考個人這篇博客:探索Newlife組件:服務代理利器XAgent的前世此生

下面是運行效果,結果,結果在右邊日誌文件中。

3.cron-expression-descriptor使用

  cron-expression-descriptor是一個C#開發的開源Cron表達式解析器,能夠將Cron表達式轉換爲天然語言,支持英語/西班牙語/俄語/法語/簡體中文等語言。支持的平臺有.NET Core1.0,.NET Framework 4.5和Mono 4.5。

Github地址:https://github.com/bradymholt/cron-expression-descriptor

好比咱們來看幾個例子,直接在VS中使用Nuget,搜索CronExpressionDescriptor安裝便可:

static void Main(string[] args)
{
    XTrace.UseConsole();
    XTrace.WriteLine(ExpressionDescriptor.GetDescription("*/6 * 1 * *",
            new Options() { Locale= "zh-CN" }));
    XTrace.WriteLine(ExpressionDescriptor.GetDescription("* * * 2,6 *", 
            new Options() { Locale = "zh-CN" }));
    XTrace.WriteLine(ExpressionDescriptor.GetDescription("*/3 12 * 1 MON-FRI", 
            new Options() { Locale = "zh-CN" }));
    Console.ReadKey();
}

解析的內容以下,咱們在選項中配置了Local="zh-CN":

注意安裝後,支持的語言資源文件都在bin目錄下,以下面就是支持的語言:

因此有了這東西,作一個在線版的Cron解析器也很easy了。。。好了,剩下的該你在業務中表演了。 

4.資源

本文演示代碼下載:CronNET.rar

Cron表達式語法參考:Cron表達式

CronNET Github地址:https://github.com/kevincolyar/CronNET

Cron解析器Github地址:https://github.com/bradymholt/cron-expression-descriptor

相關文章
相關標籤/搜索