Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u werkt met timertriggers in Azure Functions. Met een timertrigger kunt u een functie volgens een schema uitvoeren.
Dit is referentie-informatie voor Azure Functions-ontwikkelaars. Als u nog geen ervaring hebt met Azure Functions, begint u met de volgende resources:
C#-verwijzingen voor ontwikkelaars:
Ondersteuning voor deze binding wordt automatisch aangeboden in alle ontwikkelomgevingen. U hoeft het pakket niet handmatig te installeren of de uitbreiding te registreren.
Source code for the timer extension package is in the azure-webjobs-sdk-extensions GitHub repository.
Important
In dit artikel worden tabbladen gebruikt ter ondersteuning van meerdere versies van het Node.js programmeermodel. Het v4-model is algemeen beschikbaar en is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Raadpleeg de ontwikkelaarshandleiding voor Azure Functions Node.js voor meer informatie over hoe het v4-model werkt. To learn more about the differences between v3 and v4, refer to the migration guide.
Azure Functions ondersteunt twee programmeermodellen voor Python. De manier waarop u uw bindingen definieert, is afhankelijk van het gekozen programmeermodel.
Met het Python v2-programmeermodel kunt u bindingen definiëren met behulp van decorators rechtstreeks in uw Python-functiecode. Zie de Ontwikkelaarshandleiding voor Python voor meer informatie.
Dit artikel ondersteunt beide programmeermodellen.
Example
In dit voorbeeld ziet u een C#-functie die wordt uitgevoerd telkens wanneer de minuten een waarde deelbaar hebben met vijf. Wanneer de functie bijvoorbeeld begint om 18:55:00, is de volgende uitvoering om 19:00:00 uur. Er wordt een TimerInfo
object doorgegeven aan de functie.
U kunt een C#-functie maken met behulp van een van de volgende C#-modi:
-
Geïsoleerd werkrolmodel: gecompileerde C#-functie die wordt uitgevoerd in een werkproces dat is geïsoleerd van de runtime. Geïsoleerd werkproces is vereist voor de ondersteuning van C#-functies die worden uitgevoerd op LTS- en niet-LTS-versies .NET en .NET Framework. Extensies voor geïsoleerde werkprocesfuncties maken gebruik van
Microsoft.Azure.Functions.Worker.Extensions.*
naamruimten. -
In-process model: Compiled C# function that runs in the same process as the Functions runtime. In a variation of this model, Functions can be run using C# scripting, which is supported primarily for C# portal editing. Extensies voor in-process-functies maken gebruik van
Microsoft.Azure.WebJobs.Extensions.*
naamruimten.
Important
De ondersteuning wordt beëindigd voor het in-process model op 10 november 2026. We raden u ten zeerste aan uw apps te migreren naar het geïsoleerde werkrolmodel voor volledige ondersteuning.
[Function(nameof(TimerFunction))]
[FixedDelayRetry(5, "00:00:10")]
public static void Run([TimerTrigger("0 */5 * * * *")] TimerInfo timerInfo,
FunctionContext context)
{
var logger = context.GetLogger(nameof(TimerFunction));
logger.LogInformation($"Function Ran. Next timer schedule = {timerInfo.ScheduleStatus?.Next}");
}
Met de volgende voorbeeldfunctie wordt elke vijf minuten geactiveerd en uitgevoerd. The @TimerTrigger
annotation on the function defines the schedule using the same string format as CRON expressions.
@FunctionName("keepAlive")
public void keepAlive(
@TimerTrigger(name = "keepAliveTrigger", schedule = "0 */5 * * * *") String timerInfo,
ExecutionContext context
) {
// timeInfo is a JSON string, you can deserialize it to an object using your favorite JSON library
context.getLogger().info("Timer is triggered: " + timerInfo);
}
In het volgende voorbeeld ziet u een timertriggerbinding en functiecode die gebruikmaakt van de binding, waarbij een exemplaar dat de timer vertegenwoordigt, wordt doorgegeven aan de functie. De functie schrijft een logboek dat aangeeft of deze functie aanroep te wijten is aan een gemiste planning. Het voorbeeld is afhankelijk van of u het python-programmeermodel v1 of v2 gebruikt.
import datetime
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="mytimer")
@app.timer_trigger(schedule="0 */5 * * * *",
arg_name="mytimer",
run_on_startup=False)
def test_function(mytimer: func.TimerRequest) -> None:
utc_timestamp = datetime.datetime.utcnow().replace(
tzinfo=datetime.timezone.utc).isoformat()
if mytimer.past_due:
logging.info('The timer is past due!')
logging.info('Python timer trigger function ran at %s', utc_timestamp)
The following example shows a timer trigger TypeScript function.
import { app, InvocationContext, Timer } from '@azure/functions';
export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<void> {
context.log('Timer function processed request.');
}
app.timer('timerTrigger1', {
schedule: '0 */5 * * * *',
handler: timerTrigger1,
});
The following example shows a timer trigger JavaScript function.
Here's the binding data in the function.json file:
{
"schedule": "0 */5 * * * *",
"name": "myTimer",
"type": "timerTrigger",
"direction": "in"
}
Hier volgt de timerfunctiecode in het bestand run.ps1:
# Input bindings are passed in via param block.
param($myTimer)
# Get the current universal time in the default string format.
$currentUTCtime = (Get-Date).ToUniversalTime()
# The 'IsPastDue' property is 'true' when the current function invocation is later than scheduled.
if ($myTimer.IsPastDue) {
Write-Host "PowerShell timer is running late!"
}
# Write an information log with the current time.
Write-Host "PowerShell timer trigger function ran! TIME: $currentUTCtime"
Attributes
In-process C# library uses TimerTriggerAttribute from Microsoft.Azure.WebJobs.Extensions whereas isolated worker process C# library uses TimerTriggerAttribute from Microsoft.Azure.Functions.Worker.Extensions.Timer to define the function. C#-script maakt in plaats daarvan gebruik van een function.json configuratiebestand.
Attribute property | Description |
---|---|
Schedule | A CRON expression or a TimeSpan value. Een TimeSpan kan alleen worden gebruikt voor een functie-app die wordt uitgevoerd op een App Service-plan. U kunt de planningsexpressie in een app-instelling plaatsen en deze eigenschap instellen op de naam van de app-instelling die is verpakt in % tekens, zoals %ScheduleAppSetting% . |
RunOnStartup | Als true , wordt de functie aangeroepen wanneer de runtime wordt gestart. De runtime wordt bijvoorbeeld gestart wanneer de functie-app wordt geactiveerd nadat deze inactief is gegaan vanwege inactiviteit. wanneer de functie-app opnieuw wordt opgestart als gevolg van functiewijzigingen en wanneer de functie-app wordt uitgeschaald. Wees voorzichtig.RunOnStartup moet zelden worden ingesteld true op , met name in productie. |
UseMonitor | Stel in op true of false om aan te geven of de planning moet worden bewaakt. Planningsbewaking houdt de planningsexemplaren vast om ervoor te zorgen dat de planning correct wordt onderhouden, zelfs wanneer exemplaren van de functie-app opnieuw worden opgestart. Als deze niet expliciet is ingesteld, is true de standaardwaarde voor schema's met een terugkeerinterval dat groter is dan of gelijk is aan 1 minuut. Voor schema's die meer dan één keer per minuut worden geactiveerd, is de standaardwaarde false . |
Decorators
Is alleen van toepassing op het Python v2-programmeermodel.
Voor Python v2-functies die zijn gedefinieerd met behulp van een decorator, zijn de volgende eigenschappen op het schedule
volgende:
Property | Description |
---|---|
arg_name |
De naam van de variabele die het timerobject in functiecode vertegenwoordigt. |
schedule |
A NCRONTAB expression or a TimeSpan value. Een TimeSpan kan alleen worden gebruikt voor een functie-app die wordt uitgevoerd op een App Service-plan. U kunt de planningsexpressie in een app-instelling plaatsen en deze eigenschap instellen op de naam van de app-instelling die is verpakt in % tekens, zoals in dit voorbeeld: %ScheduleAppSetting%. |
run_on_startup |
Als true , wordt de functie aangeroepen wanneer de runtime wordt gestart. De runtime wordt bijvoorbeeld gestart wanneer de functie-app wordt geactiveerd nadat deze inactief is gegaan vanwege inactiviteit. wanneer de functie-app opnieuw wordt opgestart als gevolg van functiewijzigingen en wanneer de functie-app wordt uitgeschaald. Wees voorzichtig.runOnStartup moet zelden worden ingesteld true op , met name in productie. |
use_monitor |
Stel in op true of false om aan te geven of de planning moet worden bewaakt. Planningsbewaking houdt de planningsexemplaren vast om ervoor te zorgen dat de planning correct wordt onderhouden, zelfs wanneer exemplaren van de functie-app opnieuw worden opgestart. Als deze niet expliciet is ingesteld, is true de standaardwaarde voor schema's met een terugkeerinterval dat groter is dan of gelijk is aan 1 minuut. Voor schema's die meer dan één keer per minuut worden geactiveerd, is de standaardwaarde false . |
For Python functions defined by using function.json, see the Configuration section.
Annotations
The @TimerTrigger
annotation on the function defines the schedule
using the same string format as CRON expressions. De aantekening ondersteunt de volgende instellingen:
Configuration
Is alleen van toepassing op het Python v1-programmeermodel.
In de volgende tabel worden de eigenschappen uitgelegd die u kunt instellen voor het options
object dat aan de app.timer()
methode is doorgegeven.
Property | Description |
---|---|
schedule | A NCRONTAB expression or a TimeSpan value. Een TimeSpan kan alleen worden gebruikt voor een functie-app die wordt uitgevoerd op een App Service-plan. U kunt de planningsexpressie in een app-instelling plaatsen en deze eigenschap instellen op de naam van de app-instelling die is verpakt in % tekens, zoals in dit voorbeeld: %ScheduleAppSetting%. |
runOnStartup | Als true , wordt de functie aangeroepen wanneer de runtime wordt gestart. De runtime wordt bijvoorbeeld gestart wanneer de functie-app wordt geactiveerd nadat deze inactief is gegaan vanwege inactiviteit. wanneer de functie-app opnieuw wordt opgestart als gevolg van functiewijzigingen en wanneer de functie-app wordt uitgeschaald. Wees voorzichtig.runOnStartup moet zelden worden ingesteld true op , met name in productie. |
useMonitor | Stel in op true of false om aan te geven of de planning moet worden bewaakt. Planningsbewaking houdt de planningsexemplaren vast om ervoor te zorgen dat de planning correct wordt onderhouden, zelfs wanneer exemplaren van de functie-app opnieuw worden opgestart. Als deze niet expliciet is ingesteld, is true de standaardwaarde voor schema's met een terugkeerinterval dat groter is dan of gelijk is aan 1 minuut. Voor schema's die meer dan één keer per minuut worden geactiveerd, is de standaardwaarde false . |
The following table explains the binding configuration properties that you set in the function.json file.
function.json property | Description |
---|---|
type | Moet zijn ingesteld op 'timerTrigger'. Deze eigenschap wordt automatisch ingesteld wanneer u de trigger maakt in de Azure-portal. |
direction | Moet zijn ingesteld op 'in'. Deze eigenschap wordt automatisch ingesteld wanneer u de trigger maakt in de Azure-portal. |
name | De naam van de variabele die het timerobject in functiecode vertegenwoordigt. |
schedule | A NCRONTAB expression or a TimeSpan value. Een TimeSpan kan alleen worden gebruikt voor een functie-app die wordt uitgevoerd op een App Service-plan. U kunt de planningsexpressie in een app-instelling plaatsen en deze eigenschap instellen op de naam van de app-instelling die is verpakt in % tekens, zoals in dit voorbeeld: %ScheduleAppSetting%. |
runOnStartup | Als true , wordt de functie aangeroepen wanneer de runtime wordt gestart. De runtime wordt bijvoorbeeld gestart wanneer de functie-app wordt geactiveerd nadat deze inactief is gegaan vanwege inactiviteit. wanneer de functie-app opnieuw wordt opgestart als gevolg van functiewijzigingen en wanneer de functie-app wordt uitgeschaald. Wees voorzichtig.runOnStartup moet zelden worden ingesteld true op , met name in productie. |
useMonitor | Stel in op true of false om aan te geven of de planning moet worden bewaakt. Planningsbewaking houdt de planningsexemplaren vast om ervoor te zorgen dat de planning correct wordt onderhouden, zelfs wanneer exemplaren van de functie-app opnieuw worden opgestart. Als deze niet expliciet is ingesteld, is true de standaardwaarde voor schema's met een terugkeerinterval dat groter is dan of gelijk is aan 1 minuut. Voor schema's die meer dan één keer per minuut worden geactiveerd, is de standaardwaarde false . |
When you're developing locally, add your application settings in the local.settings.json file in the Values
collection.
Caution
Don't set runOnStartup to true
in production. Door deze instelling te gebruiken, wordt code op zeer onvoorspelbare tijden uitgevoerd. In bepaalde productie-instellingen kunnen deze extra uitvoeringen leiden tot aanzienlijk hogere kosten voor apps die worden gehost in een Verbruiksabonnement. For example, with runOnStartup enabled the trigger is invoked whenever your function app is scaled. Make sure you fully understand the production behavior of your functions before enabling runOnStartup in production.
See the Example section for complete examples.
Usage
Wanneer een timertriggerfunctie wordt aangeroepen, wordt een timerobject doorgegeven aan de functie. De volgende JSON is een voorbeeldweergave van het timerobject.
{
"Schedule":{
"AdjustForDST": true
},
"ScheduleStatus": {
"Last":"2016-10-04T10:15:00+00:00",
"LastUpdated":"2016-10-04T10:16:00+00:00",
"Next":"2016-10-04T10:20:00+00:00"
},
"IsPastDue":false
}
{
"schedule":{
"adjustForDST": true
},
"scheduleStatus": {
"last":"2016-10-04T10:15:00+00:00",
"lastUpdated":"2016-10-04T10:16:00+00:00",
"next":"2016-10-04T10:20:00+00:00"
},
"isPastDue":false
}
De isPastDue
eigenschap is true
wanneer de huidige functie aanroep later is dan gepland. Het opnieuw opstarten van een functie-app kan bijvoorbeeld ertoe leiden dat een aanroep wordt gemist.
NCRONTAB expressions
Azure Functions uses the NCronTab library to interpret NCRONTAB expressions. Een NCRONTAB-expressie is vergelijkbaar met een CRON-expressie, behalve dat deze een extra zesde veld aan het begin bevat voor tijdsprecisie in seconden:
{second} {minute} {hour} {day} {month} {day-of-week}
Elk veld kan een van de volgende typen waarden hebben:
Type | Example | When triggered |
---|---|---|
Een specifieke waarde | 0 5 * * * * |
Eenmaal elk uur van de dag op minuut 5 van elk uur |
Alle waarden (* ) |
0 * 5 * * * |
Op elke minuut in het uur, gedurende uur 5 |
Een bereik (- operator) |
5-7 * * * * * |
Drie keer per minuut - bij seconden 5 tot en met 7 gedurende elke minuut van elk uur van elke dag |
Een set waarden (, operator) |
5,8,10 * * * * * |
Drie keer per minuut - bij seconden 5, 8 en 10 gedurende elke minuut van elk uur van elke dag |
Een intervalwaarde (/ operator) |
0 */5 * * * * |
12 keer per uur - op seconde 0 van elke 5e minuut van elk uur van elke dag |
Als u maanden of dagen wilt opgeven, kunt u numerieke waarden, namen of afkortingen van namen gebruiken:
- Voor dagen zijn de numerieke waarden 0 tot 6, waarbij 0 begint met zondag.
- De namen zijn in het Engels. Bijvoorbeeld:
Monday
,January
. - Namen zijn niet hoofdlettergevoelig.
- Namen kunnen worden afgekort. U wordt aangeraden drie letters te gebruiken voor afkortingen. Bijvoorbeeld:
Mon
,Jan
.
NCRONTAB examples
Hier volgen enkele voorbeelden van NCRONTAB-expressies die u kunt gebruiken voor de timertrigger in Azure Functions.
Example | When triggered |
---|---|
0 */5 * * * * |
eenmaal om de vijf minuten |
0 0 * * * * |
eenmaal bovenaan elk uur |
0 0 */2 * * * |
eenmaal om de twee uur |
0 0 9-17 * * * |
eenmaal per uur van 9:00 tot 17:00 uur |
0 30 9 * * * |
om 9:30 uur elke dag |
0 30 9 * * 1-5 |
om 9:30 uur elke weekdag |
0 30 9 * Jan Mon |
om 9:30 uur elke maandag in januari |
Note
NCRONTAB expression supports both five field and six field format. De zesde veldpositie is een waarde voor seconden die aan het begin van de expressie wordt geplaatst. Als de CRON-expressie ongeldig is, wordt er een 404-fout weergegeven als Application Insights is verbonden, worden er meer details vastgelegd.
NCRONTAB-tijdzones
De getallen in een NCRONTAB-expressie verwijzen naar een tijd en datum, niet naar een tijdspanne. Een 5 in het hour
veld verwijst bijvoorbeeld naar 5:00 uur, niet om de 5 uur.
De standaardtijdzone die wordt gebruikt met CRON-expressies is Coordinated Universal Time (UTC). Als u uw CRON-expressie wilt laten gebaseerd op een andere tijdzone, maakt u een app-instelling voor uw functie-app met de naam WEBSITE_TIME_ZONE
.
De waarde van deze instelling is afhankelijk van het besturingssysteem en de planning waarop uw functie-app wordt uitgevoerd.
Operating system | Plan | Value |
---|---|---|
Windows | All | Stel de waarde in op de naam van de gewenste tijdzone, zoals opgegeven door de tweede regel van elk paar dat is opgegeven door de Windows-opdracht tzutil.exe /L |
Linux | Premium Dedicated |
Set the value to the name of the desired time zone as shown in the tz database |
Note
WEBSITE_TIME_ZONE
en TZ
worden momenteel niet ondersteund bij uitvoering op Linux in een Verbruiks- of Flexverbruiksabonnement. In dit geval kan de instelling WEBSITE_TIME_ZONE
of TZ
SSL-gerelateerde problemen veroorzaken en ervoor zorgen dat metrische gegevens niet meer werken voor uw app.
Eastern Time in de VS (vertegenwoordigd door Eastern Standard Time
(Windows) of America/New_York
(Linux)) gebruikt momenteel UTC-05:00 tijdens de standaardtijd en UTC-04:00 tijdens de zomertijd. Als u elke dag een timertrigger wilt activeren om 10:00 uur Eastern Time, maakt u een app-instelling voor uw functie-app met de naam WEBSITE_TIME_ZONE
, stelt u de waarde Eastern Standard Time
in op (Windows) of America/New_York
(Linux) en gebruikt u vervolgens de volgende NCRONTAB-expressie:
"0 0 10 * * *"
Wanneer u gebruikt WEBSITE_TIME_ZONE
, wordt de tijd aangepast voor tijdswijzigingen in de specifieke tijdzone, inclusief zomertijd en wijzigingen in de standaardtijd.
TimeSpan
Een TimeSpan
kan alleen worden gebruikt voor een functie-app die wordt uitgevoerd op een App Service-plan.
In tegenstelling tot een NCRONTAB-expressie geeft een TimeSpan
waarde het tijdsinterval aan tussen elke functieaanroep. Wanneer een functie is voltooid nadat deze langer is dan het opgegeven interval, roept de timer de functie onmiddellijk opnieuw aan.
Uitgedrukt als een tekenreeks, is TimeSpan
de hh:mm:ss
notatie kleiner hh
dan 24. Wanneer de eerste twee cijfers 24 of hoger zijn, is dd:hh:mm
de notatie . Hieronder volgen een aantal voorbeelden:
Example | When triggered |
---|---|
"01:00:00" | every hour |
"00:01:00" | every minute |
"25:00:00:00" | om de 25 dagen |
"1.00:00:00" | every day |
Scale-out
Als een functie-app wordt uitgeschaald naar meerdere exemplaren, wordt slechts één exemplaar van een door een timer geactiveerde functie uitgevoerd op alle exemplaren. Het wordt niet opnieuw geactiveerd als er nog een openstaande aanroep wordt uitgevoerd.
Functie-apps die opslag delen
Als u opslagaccounts deelt tussen functie-apps die niet zijn geïmplementeerd in App Service, moet u mogelijk expliciet host-id toewijzen aan elke app.
Functions version | Setting |
---|---|
2.x (en hoger) |
AzureFunctionsWebHost__hostid Omgevingsvariabele |
1.x |
id in host.json |
U kunt de identificatiewaarde weglaten of de identificatieconfiguratie van elke functie-app handmatig instellen op een andere waarde.
De timertrigger maakt gebruik van een opslagvergrendeling om ervoor te zorgen dat er slechts één timerexemplaren zijn wanneer een functie-app wordt uitgeschaald naar meerdere exemplaren. Als twee functie-apps dezelfde identificatieconfiguratie delen en elk een timertrigger gebruikt, wordt slechts één timer uitgevoerd.
Retry behavior
In tegenstelling tot de wachtrijtrigger wordt de timertrigger niet opnieuw geprobeerd nadat een functie is mislukt. Wanneer een functie mislukt, wordt deze pas de volgende keer in de planning aangeroepen.
Handmatig een timertrigger aanroepen
De timertrigger voor Azure Functions biedt een HTTP-webhook die kan worden aangeroepen om de functie handmatig te activeren. Dit kan zeer nuttig zijn in de volgende scenario's.
- Integration testing
- Sleufwisselingen als onderdeel van een betrouwbaarheidstest of opwarmactiviteit
- Initiële implementatie van een functie om onmiddellijk een cache of opzoektabel in een database te vullen
Raadpleeg een niet door HTTP geactiveerde functie handmatig uitvoeren voor meer informatie over het handmatig aanroepen van een door timer geactiveerde functie.
Troubleshooting
Zie Onderzoeken en rapporteren van problemen met door timer geactiveerde functies die niet worden geactiveerd voor meer informatie over wat u moet doen wanneer de timertrigger niet werkt zoals verwacht.
Connections
Timertriggers hebben een impliciete afhankelijkheid van blobopslag, behalve wanneer ze lokaal worden uitgevoerd via de Azure Functions Core Tools. Het systeem gebruikt blobopslag om meerdere exemplaren te coördineren wanneer de app wordt uitgeschaald. Het opent blobopslag met behulp van de hostopslagverbinding (AzureWebJobsStorage
). If you configure the host storage to use an identity-based connection, the identity should have the Storage Blob Data Owner role, which is the default requirement for host storage.