You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何识别Episerver CMS 11定时任务是手动还是自动触发

判断Episerver CMS 11定时任务的触发方式(手动/自动)

在Episerver CMS 11中,你可以通过ScheduledJobLogItem和ScheduledJobTrigger的关联数据来判断任务是手动还是自动触发,具体实现步骤如下:

1. 注入核心服务

通过构造函数注入Episerver提供的两个关键服务:

  • IScheduledJobRepository:用于获取定时任务及关联的触发器信息
  • IScheduledJobLogRepository:用于获取任务的执行日志记录
private readonly IScheduledJobRepository _jobRepo;
private readonly IScheduledJobLogRepository _logRepo;

public JobTriggerChecker(IScheduledJobRepository jobRepo, IScheduledJobLogRepository logRepo)
{
    _jobRepo = jobRepo;
    _logRepo = logRepo;
}

2. 获取目标任务的执行日志

根据目标任务的ID(或名称,可通过_jobRepo.List()先查询任务ID),获取对应的执行日志列表,建议按执行时间倒序排列,方便查看最新记录:

// 替换为你要查询的定时任务ID
int targetJobId = 456;
var latestJobLogs = _logRepo.List(targetJobId)
                            .OrderByDescending(log => log.Started)
                            .ToList();

3. 判断触发类型

每个ScheduledJobLogItem包含TriggerId属性,通过该ID可以从IScheduledJobRepository中获取对应的ScheduledJobTrigger,然后查看其Type属性:

  • 当TriggerType为ScheduledJobTriggerType.Manual,即为手动触发
  • 当TriggerType为ScheduledJobTriggerType.Scheduled,即为自动定时触发

示例代码:

// 查看最近一次执行的触发方式
var latestLog = latestJobLogs.FirstOrDefault();
if (latestLog != null)
{
    var trigger = _jobRepo.GetTrigger(latestLog.TriggerId);
    if (trigger != null)
    {
        string triggerType = trigger.Type == ScheduledJobTriggerType.Manual 
            ? "手动触发" 
            : "自动定时触发";
        
        // 输出或使用结果
        Console.WriteLine($"任务【{targetJobId}】最近一次执行于{latestLog.Started},触发方式:{triggerType}");
    }
}

补充提示

  • 如果需要批量查看任务的所有执行记录的触发方式,直接遍历latestJobLogs即可
  • ScheduledJobTrigger的Schedule属性还能提供自动触发的具体定时规则(如每日凌晨执行),可按需扩展获取

内容的提问来源于stack exchange,提问作者Santhiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:25:15