Azure Timer Function v3未按每小时40分定时规则触发问题咨询
Singleton锁阻塞:你代码里加了
[Microsoft.Azure.WebJobs.Singleton]特性,这个锁会强制同一时间仅允许一个函数实例运行。如果上一次函数执行超时、挂起或者没正常释放锁,后续到点的触发请求会被直接阻塞。去函数运行日志里查上一次执行的结束时间,确认是不是在02:40、03:40这些时间点前没完成执行。时区不匹配:TimerTrigger默认使用UTC时区,如果你预期的是本地时区(比如东八区),那表达式
0 40 * * * *对应的是UTC时间每小时40分,转换成北京时间就是10:40,自然不会在你以为的凌晨时段触发。检查函数应用配置里的WEBSITE_TIME_ZONE项,有没有设置成目标时区(比如China Standard Time)。资源限制导致触发异常:如果用的是消耗计划,函数长时间闲置会进入休眠状态,冷启动可能延迟触发;如果函数执行时占用过多内存、CPU,也会导致平台跳过触发。去Azure门户的函数监控面板查看资源使用率,同时检查有没有触发失败的日志记录。
定时器状态存储异常:TimerTrigger会把上次触发的时间保存在关联的存储账户中(消耗计划用默认存储账户,专用计划需手动配置)。如果存储账户访问异常,或者存储的触发时间记录损坏,会导致定时器逻辑混乱。可以去存储账户的
azure-webjobs-hosts容器里查看定时器相关的blob文件,必要时删除对应文件重置定时器状态。代码初始化或执行异常:如果函数在启动阶段(比如依赖注入、资源初始化)抛出未捕获的异常,可能导致触发请求直接失败,且日志不明显。在Run方法开头添加日志输出,记录触发时间,确认函数是否真的接收到了触发请求;同时检查函数的启动日志,排查初始化阶段的错误。
内容的提问来源于stack exchange,提问作者Oleg Sh

