C# 在长时间运行的hangfire进程中发送心跳信号
是否可以向hangfire(Redis存储)发送心跳信号,告知系统该进程仍处于活动状态?此时,我将C# 在长时间运行的hangfire进程中发送心跳信号,c#,.net-core,scheduled-tasks,hangfire,C#,.net Core,Scheduled Tasks,Hangfire,是否可以向hangfire(Redis存储)发送心跳信号,告知系统该进程仍处于活动状态?此时,我将InvisibilityTimeout设置为TimeSpan.MaxValue以防止hangfire重新启动作业。但是,如果进程失败或服务器重新启动,该作业将永远不会从正在运行的作业列表中删除。所以我的想法是,取消大的超时,而是发送一种心跳。这是可能的吗?我找到了解决如何在Hangfire中保持长期工作的方法。 上面说一旦你 […]正在点击hangfire的invisibilityTimeout。你
InvisibilityTimeout
设置为TimeSpan.MaxValue
以防止hangfire重新启动作业。但是,如果进程失败或服务器重新启动,该作业将永远不会从正在运行的作业列表中删除。所以我的想法是,取消大的超时,而是发送一种心跳。这是可能的吗?我找到了解决如何在Hangfire中保持长期工作的方法。
上面说一旦你
[…]正在点击hangfire的invisibilityTimeout
。你有两个选择
- 将超时时间增加到作业运行所需的时间
- 让工作人员发出心跳,让hangfire知道它还活着
CTRL+Z
在Linux中分别为fg
),请参见例如
实际上,我使用了二进制myMonteCarloExperiment.x
和包装器脚本myMCjobStarter.sh
。我最大的计算时间是一天。我将用数百个包装器脚本调用填充队列,边界条件是每次只能运行一个。脚本将检查是否已经在计算集群的任何位置启动了进程myMonteCarloExperiment.x
,如果没有,它将启动一个实例。如果有一个挂起的进程,包装器脚本将转发它并让它运行23小时55分钟,然后挂起该进程。在任何其他情况下,包装器脚本都会报告错误
这种方法没有实现作业心跳,但它确实运行了一个很长的作业。它还避免了必须清理Hangfire的作业日志,从而使队列管理员感到高兴
进一步参考
- 看来这本书不错