azure-functions - Azure 计时器触发功能根本不执行脚本日志
问题描述
我正在使用测试模板测试计时器触发功能,并且无法执行脚本和任何日志作为“JavaScript 计时器触发功能运行!”。它以前对我有用,但是第二天它根本不执行脚本,函数本身似乎正在运行,但我无法测试脚本,也不明白问题出在哪里。我的 function.js 文件
{
"bindings": [
{
"name": "myTimer",
"type": "timerTrigger",
"direction": "in",
"schedule": "0 * * * * *",
"runOnStartup": true
}
]
}
local.settings.json
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "node",
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"githubKey": "sample123"
},
"Host": {
"LocalHttpPort": 7071,
"CORS": "*",
"CORSCredentials": false
}
}
这就是我在终端中所拥有的
index.js
module.exports = async function (context, myTimer) {
var timeStamp = new Date().toISOString();
if (myTimer.IsPastDue)
{
context.log('JavaScript is running late!');
}
context.log('JavaScript timer trigger function ran!', timeStamp);
};
解决方案
我可以重现您的问题,然后我在 github 中发现了同样的问题:使用主机锁改进计时器触发行为。
它是由 Singleton Lock 引起的,更多细节可以参考:Singleton Locks,在 Local Development 下它说:
ListenerLockPeriod 的默认值为 60 秒,这意味着如果主机被不正常地杀死(例如,在本地运行时关闭控制台窗口),在租约自然到期之前,无法重新获取所持有的 blob 租约。这意味着如果您杀死一个正在运行的实例然后尝试立即重新启动 JobHost,您将看到该函数不会立即开始运行,因为它正在等待获取 Singleton 锁。
假设这是你的问题的原因,所以在 github 问题中有一个解决方案,listenerLockPeriod
在 host.json 中设置。
这是一个示例:
"singleton": {
"listenerLockPeriod": "00:00:15"
}
推荐阅读
- html - 如何修复 TypeError:无法读取未定义的属性“修剪”
- python - 我需要在矩形中添加文本,我该怎么做?
- reactjs - SweetAlert2 没有出现
- python - 当代码在 def 中时,canvas.create_image 不起作用:
- mysql - 有没有办法获取查询结果的列名
- scala - 如何在 sbt 交叉编译平台中运行特定的 scala-test?
- c++ - Qt: How to catch QDateEdit click event?
- opencv - How to calculate radius in orb?
- hyperledger-fabric - Hyperleger Fabric 中共识的细节是什么?
- http - 从 ReadCloser 发送 HTTP Put 正文永远不会结束