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

本地部署Kudu的连续运行Webjob每15分钟自动停止如何解决?

本地部署Kudu队列触发器WebJobs 15分钟自动停止排查方案

1 修正WebJobs本身的运行配置

  • 首先确认你部署的是连续运行类型的WebJobs:队列触发器的WebJobs需要配置为连续运行才会常驻后台,否则单次任务执行完成后就会自动退出。在WebJobs的部署根目录下新增settings.job文件,写入以下配置:
    {
      "is_singleton": true,
      "is_always_running": true
    }
    
    部署完成后在Kudu的WebJobs管理页确认运行状态标记为「连续运行」。
  • 显式关闭WebJobs SDK的闲置自动退出逻辑:WebJobs SDK默认如果长时间没有队列消息处理,会自动停止宿主进程。在JobHost初始化代码中添加以下配置:
    var hostConfig = new JobHostConfiguration();
    // 禁止闲置超时退出
    hostConfig.IdleTimeout = Timeout.InfiniteTimeSpan;
    // 可根据需求调整队列最大轮询间隔
    hostConfig.Queues.MaxPollingInterval = TimeSpan.FromMinutes(2);
    new JobHost(hostConfig).RunAndBlock();
    

2 排查IIS进程回收规则(核心排查项)

你之前配置的Azure专属Always On配置项本地IIS不识别,需要按IIS的规则配置:

  • 打开IIS管理器,定位到承载Kudu服务的应用程序池,打开「高级设置」:
    • 确认「启动模式」已设置为AlwaysRunning
    • 找到「回收」分类:
      • 将「定期时间间隔(分钟)」设置为0,禁用固定周期回收
      • 清空「特定时间回收」列表,取消固定时间点回收
      • 将「虚拟内存限制」「专用内存限制」均设置为0,取消内存阈值回收
    • 找到「进程模型」分类:
      • 将「闲置超时(分钟)」设置为0,禁用闲置超时回收
      • 将「闲置超时操作」设置为NoAction,避免闲置后自动终止进程
  • 在Kudu站点的web.config中添加IIS应用程序初始化配置,保证站点被回收后自动预热启动:
    <system.webServer>
      <applicationInitialization doAppInitAfterRestart="true">
        <add initializationPage="/" />
        <add initializationPage="/api/webjobs" />
      </applicationInitialization>
    </system.webServer>
    

3 验证保活脚本有效性

  • 确认保活脚本请求的是Kudu的动态接口(推荐/api/webjobs),不要请求静态资源,无逻辑的静态资源访问不会被IIS计数为有效活跃请求
  • 如果Kudu开启了基础认证,保活请求必须携带有效的认证信息,401/403类的无权限请求无法实现保活效果
  • 检查脚本执行日志,确认没有请求超时、网络不通等异常,保证保活请求实际发送成功

4 日志定位根因

打开Kudu WebJobs管理页对应的任务日志,查看停止前的最后日志内容:

  • 如果日志包含「进程收到回收信号」「应用程序域卸载」类内容,说明是IIS侧的回收规则未配置正确,回到第2步重新排查
  • 如果日志包含异常堆栈信息,说明是WebJobs代码本身抛出异常导致退出,对应排查代码问题(比如队列连接中断、依赖项缺失、未处理异常等)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:54:04