Quartz.NET是一个开源的作业调度框架,非常适合在日常工作中做一些定时任务。
在Windows系统中,我们可以直接新建一个Windows Service项目,进行相应的编码生成一个exe程序并部署为 Windows服务,启动服务,即可定时执行任务。
在Linux系统中,由于Windows 服务只能运行在Windows系统上,所以想达到上面的目标,创建一个控制台应用程序是更好的选择。
开发环境
Windows 10 ,visual studio 2019,版本16.6.1,.net core 3.1
运行环境
CentOS Linux release 7.5.1804 (Core)
1 static void Main(string[] args) 2 { 3 IScheduler scheduler; 4 ISchedulerFactory factory = new StdSchedulerFactory(); 5 scheduler = factory.GetScheduler().Result; 6 IJobDetail testJobDetail = JobBuilder.Create<TestJob>().WithIdentity("testJob").Build(); 7 ITrigger testJobTrigger = TriggerBuilder.Create().WithCronSchedule("0/2 * * * * ? *").Build(); 8 scheduler.ScheduleJob(testJobDetail, testJobTrigger); 9 scheduler.Start(); 10 while (true) 11 { 12 Thread.Sleep(50); 13 } 14 }
1 public class TestJob:IJob 2 { 3 public Task Execute(IJobExecutionContext context) 4 { 5 return Task.Run(() => 6 { 7 var content = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}"; 8 9 string path = "/test.log"; 10 using (StreamWriter sw=new StreamWriter(path,true)) 11 { 12 sw.WriteLine(content); 13 } 14 }); 15 } 16 }
发布配置
之后上将生成的文件上传到Linux服务器
执行以下代码
vi /lib/systemd/system/your-service-name.service #insert the following #your service description [Unit] Description=Test Service #your console app path [Service] ExecStart=/wwwroot/test/demo.Jobs [Install] WantedBy=default.target
保存之后执行以下代码
systemctl daemon-reload systemctl start your-service-name.service systemctl status your-service-name.service
上图表示服务正常运行
运行命令
cat /test.log
即可看到示例中正常记录的时间