Som*_*mar 6 azure azure-functions azure-functions-runtime azure-functions-core-tools
根据我的理解 Azure 函数将执行
如果RunOnStartup = true
1. on startup
2. if a host changed
3. a new deployment happen
4. on schedule time
Run Code Online (Sandbox Code Playgroud)
并且,如果RunOnStartup = false 或未定义
1. on schedule time only
Run Code Online (Sandbox Code Playgroud)
但是当我使用RunOnStartup = false在本地运行它时,它也在启动时执行,并且在 azure 门户上运行良好。任何人都可以请建议为什么会发生?
更新:- 功能代码:-
public static void Run([TimerTrigger("0 30 3 * * *", RunOnStartup = false)]TimerInfo myTimer, TraceWriter log, ExecutionContext executionContext)
{
log.Info($"Function1- Timer trigger function executed at: {DateTime.Now}");
try
{
//main work
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
}
finally
{
log.Info($"Function1 - Timer trigger function ENDED at: {DateTime.Now}");
}
}
Run Code Online (Sandbox Code Playgroud)
控制台输出:-
your worker runtime is not set. As of 2.0.1-beta.26 a worker runtime setting is
Run Code Online (Sandbox Code Playgroud)
必需的。请运行func settings add FUNCTIONS_WORKER_RUNTIME <option>或添加 FUNCTION S_WORKER_RUNTIME 到您的 local.settings.json 可用选项:dotnet、node、python
%%%%%%
%%%%%%
@ %%%%%% @
@@ %%%%%% @@
@@@ %%%%%%%%%%% @@@
@@ %%%%%%%%%% @@
@@ %%%% @@
@@ %%% @@
@@ %% @@
%%
%
Azure Functions Core Tools (2.3.148 Commit hash: f9b3db04f9833b431f1b001efb3e5783a169ebfc)
Function Runtime Version: 2.0.12210.0
[19-Dec-18 8:22:47 AM] Building host: startup suppressed:False, configuration suppressed: False
[19-Dec-18 8:22:47 AM] Reading host configuration file 'D:\path****\host.json'
[19-Dec-18 8:22:47 AM] Host configuration file read:
[19-Dec-18 8:22:47 AM] {
[19-Dec-18 8:22:47 AM] "version": "2.0"
[19-Dec-18 8:22:47 AM] }
[19-Dec-18 8:22:47 AM] Initializing Host.
[19-Dec-18 8:22:47 AM] Host initialization: ConsecutiveErrors=0, StartupCount=1
[19-Dec-18 8:22:47 AM] Starting JobHost
[19-Dec-18 8:22:47 AM] Starting Host (HostId=boldsombirk-85417686, InstanceId=4f41b83d-022e-4e75-b75b-528890f62058, Version=2.0.12210.0, ProcessId=7012, AppDomainId=1, InDebugMode=False, InDiagnosticMode=False, FunctionsExtensionVersion=)
[19-Dec-18 8:22:47 AM] Loading functions metadata
[19-Dec-18 8:22:48 AM] 1 functions loaded
[19-Dec-18 8:22:48 AM] Generating 1 job function(s)
[19-Dec-18 8:22:48 AM] Found the following functions:
[19-Dec-18 8:22:48 AM] Function1.Run
[19-Dec-18 8:22:48 AM]
[19-Dec-18 8:22:48 AM] Host initialized (673ms)
[19-Dec-18 8:22:49 AM] Executing 'Function1' (Reason='Timer fired at 2018-12-19T13:52:49.5718606+05:30', Id=e1603f8f-41d0-492e-8674-d5771813422d)
[19-Dec-18 8:23:41 AM] Function1 - Timer trigger function executed at: 19-Dec-18 1:53:41 PM
Run Code Online (Sandbox Code Playgroud)
让我们从一个例子开始,一个定时器触发器以0 */5 * * * *schedule at开始12/19/2018 4:01:00 PM,我们可以看到 schedule 打印
12/19/2018 4:05:00 PM
12/19/2018 4:10:00 PM
12/19/2018 4:15:00 PM
12/19/2018 4:20:00 PM
12/19/2018 4:25:00 PM
Run Code Online (Sandbox Code Playgroud)
但是,我们在4:02 PM. 然后在 处再次运行它4:08 PM,我们可以看到定时器触发器在启动时执行。
发生这种情况是因为 ScheduleStatus(如下所示)已在触发器第一次启动时存储在 blob 存储中。当我们再次运行项目时,定时器触发器读取现有的Next计划时间并将其与当前时间进行比较。如果预定Next时刻已过,定时器触发器在启动时立即执行。
// I am in UTC+8:00 time zone
{
"Last":"0001-01-01T00:00:00",
"Next":"2018-12-19T16:05:00+08:00",
"LastUpdated":"2018-12-19T16:02:12.7071566+08:00"
}
Run Code Online (Sandbox Code Playgroud)
按照文档中的示例处理过时计划的执行。IsPastDue当当前函数调用晚于预定时间时,该属性为 true。
[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
{
if(myTimer.IsPastDue)
{
log.LogInformation("Timer is running late!");
}
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3295 次 |
| 最近记录: |