求助:如何识别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
相关产品推荐
相关产品推荐

