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

如何在Hangfire 1.7.28中查询特定时间运行的作业?

查询Hangfire 1.7.28特定时间点运行的作业

方法一:直接查询底层数据库

Hangfire 1.7.x会将作业的状态变更记录存储在Hangfire.State表中,作业进入/退出Running状态的时间都能在这里找到。结合Hangfire.Job表的作业详情,就能筛选出目标时间点正在运行的作业。

执行以下SQL查询(替换[目标时间]为你的Bug发生精确时间):

SELECT 
    j.Id AS 作业ID,
    j.Method AS 作业方法名,
    s.CreatedAt AS 进入运行状态时间,
    s.ExpireAt AS 退出运行状态时间
FROM Hangfire.Job j
INNER JOIN Hangfire.State s 
    ON j.Id = s.JobId
WHERE 
    s.StateName = 'Running'
    AND s.CreatedAt <= '[目标时间]'
    AND (s.ExpireAt IS NULL OR s.ExpireAt >= '[目标时间]')
  • 逻辑说明:CreatedAt是作业开始运行的时间,ExpireAt是作业结束运行的时间(若作业仍在运行则为NULL),通过这两个时间区间匹配目标时间点,就能定位当时正在运行的作业。

方法二:优化仪表盘筛选

如果不想操作数据库,可对Hangfire仪表盘的数据做二次处理:

  • 进入仪表盘的「Jobs」页面,切换到「Recent」视图,这里会显示最近24小时的作业记录,包含Started At(开始时间)和Duration(运行时长)。
  • 将页面表格数据复制到Excel,通过公式计算作业的结束时间(开始时间+时长),再筛选出覆盖目标时间点的作业记录。
  • 也可使用浏览器的开发者工具(F12),在控制台执行简单脚本提取符合时间区间的记录,比如:
// 示例:筛选2024-05-20 14:30:00前后运行的作业
const targetTime = new Date('2024-05-20T14:30:00').getTime();
document.querySelectorAll('.job-list tr').forEach(tr => {
    const startTimeStr = tr.querySelector('.started-at')?.textContent;
    const durationStr = tr.querySelector('.duration')?.textContent;
    if (!startTimeStr || !durationStr) return;
    
    const startTime = new Date(startTimeStr).getTime();
    // 简单转换时长为毫秒(示例仅处理秒级,需根据实际格式调整)
    const durationMs = parseInt(durationStr) * 1000;
    const endTime = startTime + durationMs;
    
    if (startTime <= targetTime && endTime >= targetTime) {
        console.log(tr.textContent);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:12:42