前段需要在業(yè)務(wù)中實(shí)現(xiàn)某些時(shí)間段的簡單定時(shí)任務(wù),類似crontab的調(diào)度,因?yàn)闃I(yè)務(wù)會(huì)放在docker中,所以不想用直接用crontab,在網(wǎng)上搜了一下,發(fā)現(xiàn)一個(gè)開源的實(shí)現(xiàn) Pomelo.AspNetCore.TimedJob,使用簡單,但是因?yàn)槭菚r(shí)間間隔執(zhí)行,不太符合指定時(shí)間段要求,不過感謝有此開源代碼,我在其基礎(chǔ)上重新擼了個(gè)crontab的實(shí)現(xiàn),并增加了一些功能,代碼已放在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
}
}
即可完成每分鐘調(diào)用一次的定時(shí)任務(wù)
Light.Cron完全兼容Linux Crontab時(shí)間格式
* * * * *
分 時(shí) 日 月 周
第1列表示分鐘0~59
第2列表示小時(shí)0~23
第3列表示日期1~31
第4列表示月份1~12
第5列標(biāo)識號星期0~7(0和7表示星期天)
每天10點(diǎn)至16點(diǎn)
0 10-16 * * *
每隔兩個(gè)小時(shí)
0 */2 * * *
并在此基礎(chǔ)上對一直一來對crontab使用的一些痛點(diǎn)進(jìn)行了功能增強(qiáng)
跨時(shí)間段
當(dāng)時(shí)間段格式出現(xiàn)結(jié)束時(shí)間小于開始時(shí)間, 則代表由開始時(shí)間到下一級時(shí)間的開始時(shí)間, 如
每月1號22點(diǎn)到2號4點(diǎn)之間的時(shí)間段
* 22-4 1 * *
每周一至周五晚上22點(diǎn)到次日4點(diǎn)之間的時(shí)間段, 里面包含周六的0點(diǎn)-4點(diǎn), 不包含周一的0點(diǎn)-4點(diǎn)
* 22-4 * * 1-5
月末日期
日期格式中增加新增e標(biāo)記作為月末最后一天, 并且可以通過e+數(shù)字代表最后一天再往前倒數(shù)天數(shù), 如當(dāng)月共31天, 則e=31, e1=30, e2=29, e3=28. 當(dāng)月共30天, 則e=30, e1=29, e2=28, e3=27. 該語法同樣支持范圍
0 0 e3-e1 * *
時(shí)間范圍
Light.Cron可以通過新語法HH:mm-HH:mm將時(shí)分結(jié)合, 替換原有的時(shí)分設(shè)置, 如
每日9點(diǎn)30分至15點(diǎn)0分, 每隔一分鐘執(zhí)行一次
09:30-15:00 * * *
每日21點(diǎn)30分至次日的5點(diǎn)30分, 每隔5分鐘執(zhí)行一次
21:30-05:30/5 * * *
多組調(diào)度計(jì)劃
Light.Cron可以通過|符號支持多組調(diào)度計(jì)劃, 如
0點(diǎn)至11點(diǎn), 每分鐘執(zhí)行一次, 12點(diǎn)至23點(diǎn), 每5分鐘執(zhí)行一次
* 0-11 * * *|*/5 12-23 * * *
簡略寫法
如下一級及其以之后的時(shí)間范圍都是*, 可以簡略不寫, 如
* * * * * = *
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
總結(jié)
以上所述是小編給大家介紹的在dotnet core實(shí)現(xiàn)類似crontab的定時(shí)任務(wù),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
您可能感興趣的文章:- AspNet Core上實(shí)現(xiàn)web定時(shí)任務(wù)實(shí)例
- Linux Crontab Shell腳本實(shí)現(xiàn)秒級定時(shí)任務(wù)的方法
- linux定時(shí)任務(wù)crontab 實(shí)現(xiàn)每秒執(zhí)行一次的方法
- Linux中crontab定時(shí)任務(wù)不執(zhí)行的原因
- CentOS下采用Crontab實(shí)現(xiàn)PHP腳本定時(shí)任務(wù)
- Linux定時(shí)任務(wù)Crontab詳解(推薦)
- 詳解使用python crontab設(shè)置linux定時(shí)任務(wù)