zoukankan      html  css  js  c++  java
  • 在dotnet core实现类似crontab的定时任务

      前段需要在业务中实现某些时间段的简单定时任务,类似crontab的调度,因为业务会放在docker中,所以不想用直接用crontab,在网上搜了一下,发现一个开源的实现 Pomelo.AspNetCore.TimedJob,使用简单,但是因为是时间间隔执行,不太符合指定时间段要求,不过感谢此开源代码和作者,我在其基础上重新撸了个crontab的实现,并增加了一些功能,代码已放在Github上。

        源码地址:https://github.com/aquilahkj/Light.Cron

        使用Demo:https://github.com/aquilahkj/Light.Cron/tree/master/sample/Light.Cron.Sample

        首先通过Nuget安装

    PM> Install-Package Light.Cron
    

      配置StartUp

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddCrontabJob();
        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseCrontabJob();
            app.UseMvc();
        }
    }
    

      编写crontab方法

    [CrontabJob]
    public class CrontabObject
    {
        [CrontabSchedule("crontab1", "* * * * *")]
        public void DoSomeThing()
        {
            // Todo
        }
    }
    

      即可完成每分钟调用一次的定时任务

    Light.Cron完全兼容Linux Crontab时间格式

    *  *  *  *  *
    分 时 日 月 周
    

    第1列表示分钟0~59

    第2列表示小时0~23

    第3列表示日期1~31

    第4列表示月份1~12

    第5列标识号星期0~7(0和7表示星期天)

    每天10点至16点 
    0 10-16 * * *
    
    每隔两个小时 
    0 */2 * * *

    并在此基础上对一直以来在crontab使用上的一些痛点进行了功能增强

    跨时间段

    当时间段格式出现结束时间小于开始时间, 则代表由开始时间到下一级时间的开始时间, 如

    每月1号22点到2号4点之间的时间段
    * 22-4 1 * * 
    每周一至周五晚上22点到次日4点之间的时间段, 里面包含周六的0点-4点, 不包含周一的0点-4点
    * 22-4 * * 1-5
    

    月末日期

    日期格式中增加新增e标记作为月末最后一天, 并且可以通过e+数字代表最后一天再往前倒数天数, 如当月共31天, 则e=31, e1=30, e2=29, e3=28. 当月共30天, 则e=30, e1=29, e2=28, e3=27. 该语法同样支持范围

    每月1日、15日和最后一日
    0 0 1,15,e * *
    倒数第4天至倒数第2天
    0 0 e3-e1 * *

    时间范围

    Light.Cron可以通过新语法HH:mm-HH:mm将时分结合, 替换原有的时分设置, 如

    每日9点30分至15点0分, 每隔一分钟执行一次
    09:30-15:00 * * *
    每日21点30分至次日的5点30分, 每隔5分钟执行一次
    21:30-05:30/5 * * *
    

    多组调度计划

    Light.Cron可以通过|符号支持多组调度计划, 如

    0点至11点, 每分钟执行一次, 12点至23点, 每5分钟执行一次
    * 0-11 * * *|*/5 12-23 * * *
    

    简略写法

    如下一级及其以之后的时间范围都是*, 可以简略不写, 如

    * * * * * = *
    30 9 * * * = 30 9
    09:30-15:00 * * * = 09:30-15:00
    0 0 1 * * = 0 0 1
    0 0 1 2-5 * = 0 0 1 2-5
  • 相关阅读:
    安装xshell6
    eclipse的安装和汉化
    collectd+infludb+grafana实现tomcat JVM监控
    百度网站统计和CNZZ网站统计对比
    shell,计算指定行的和,计算指定列的和
    我为什么要写博客
    kafka监控之topic的lag情况监控
    用rundeck启动tomcat报错
    xwiki升级8.8.4
    矩阵掩膜操作
  • 原文地址:https://www.cnblogs.com/aquilahkj/p/11226017.html
Copyright © 2011-2022 走看看