如何在服务器上运行没有 Windows 服务的计划作业?

Posted

技术标签:

【中文标题】如何在服务器上运行没有 Windows 服务的计划作业?【英文标题】:How can I run schedule job with out windows service on server? 【发布时间】:2021-04-21 06:23:56 【问题描述】:

我已经发送了一封使用asp.net 和quartz 在本地工作的邮件。它工作得很好。但是当我把它放在服务器上时它不起作用。他们说,因为它是共享主机,出于安全原因,他们无法运行它。 Sql Agent 也没有作为标准提供。 我猜 HangFire 不使用 Windows 服务。我也找不到如何使用 asp.net 网络表单。

【问题讨论】:

更改主机 :P 除此之外,我认为调度程序没有理由无法发送电子邮件。 Quartz.net 只是你的 asp.net 应用程序进程中的线程。 也许问题不在于 Quartz 而在于发送电子邮件?正如@Isma 所说,它应该可以工作。 我有 20 个托管网站,现在没有变化 :)。使用quartz.net 在我的本地网络上发送邮件工作正常。 SQL 表中的 backdate 字段如果 backdate 过期而不是完美发送邮件。但发布到服务器不起作用。 天哪.. :) 将石英版本 2.2.4 更改为 2.5 运行完美.. :) 谢谢@Isma 【参考方案1】:

也许有人需要这个用于 Asp.net webform 的代码。

电子邮件工作代码

public class EmailJob : IJob


    public void Execute(IJobExecutionContext context)
    
        sendmail();
    

   public void sendMail()
    
       //send mail code
    


JobScheduler 代码每天 00.00 工作。你可以改变你想要的.. :)

public class JobScheduler

    public static void Start()
    
        IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
        scheduler.Start();

        IJobDetail job = JobBuilder.Create<EmailJob>().Build();


        ITrigger trigger = TriggerBuilder.Create()
            .WithDailyTimeIntervalSchedule
              (s =>
                 s.WithIntervalInHours(24)
                .OnEveryDay()
                .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(00, 00))
                .InTimeZone(TimeZoneInfo.Local)
              )
            .Build();

        scheduler.ScheduleJob(job, trigger);
    

Global.asax 启动作业调度程序

void Application_Start(object sender, EventArgs e)
    
        JobScheduler.Start();

    

【讨论】:

以上是关于如何在服务器上运行没有 Windows 服务的计划作业?的主要内容,如果未能解决你的问题,请参考以下文章

windows任务计划程序是怎么回事,有啥用途,该怎么设置??

windows计划任务的问题。

Windows 任务计划程序安装程序

如何在Windows上配置并运行Nginx

如何将我的 c# 程序作为计划任务运行

如何在windows中获取实时时间