日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

一篇学会cron表达式

發布時間:2023/11/29 windows 62 coder
生活随笔 收集整理的這篇文章主要介紹了 一篇学会cron表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。