Időzítő eseményindító az Azure Functionshez
Ez a cikk bemutatja, hogyan használhatók időzítő-eseményindítók az Azure Functionsben. Az időzítő eseményindítója lehetővé teszi egy függvény ütemezés szerinti futtatását.
Ezek az Azure Functions-fejlesztők referenciaadatai. Ha még nem használja az Azure Functionst, kezdje a következő erőforrásokkal:
C# fejlesztői hivatkozások:
Az időzítő által aktivált függvények manuális futtatásával kapcsolatos információkért lásd : Nem HTTP-aktivált függvény manuális futtatása.
Ennek a kötésnek a támogatása minden fejlesztési környezetben automatikusan megtörténik. Nem kell manuálisan telepítenie a csomagot, és nem kell regisztrálnia a bővítményt.
Az időzítőbővítménycsomag forráskódja az azure-webjobs-sdk-extensions GitHub-adattárban található.
Fontos
Ez a cikk lapokat használ a Node.js programozási modell több verziójának támogatásához. A v4-modell általánosan elérhető, és úgy lett kialakítva, hogy rugalmasabb és intuitívabb felhasználói élményt nyújtson JavaScript- és TypeScript-fejlesztők számára. A v4-modell működésével kapcsolatos további információkért tekintse meg az Azure Functions Node.js fejlesztői útmutatóját. A v3 és a v4 közötti különbségekről a migrálási útmutatóban olvashat bővebben.
Az Azure Functions két Python-programozási modellt támogat. A kötések definiálásának módja a választott programozási modelltől függ.
A Python v2 programozási modell lehetővé teszi, hogy a kötéseket dekorátorokkal definiálja közvetlenül a Python-függvénykódban. További információt a Python fejlesztői útmutatójában talál.
Ez a cikk mindkét programozási modellt támogatja.
Példa
Ez a példa egy C# függvényt mutat be, amely minden alkalommal végrehajtja, amikor a percek értéke ötrel osztható. Ha például a függvény 18:55:00-kor indul, a következő végrehajtás 19:00:00-kor történik. A TimerInfo
függvény egy objektumot ad át.
A C#-függvények a következő C#-módok egyikével hozhatók létre:
- Izolált feldolgozómodell: Lefordított C# függvény, amely a futtatókörnyezettől elkülönített feldolgozói folyamatban fut. Izolált feldolgozói folyamat szükséges az LTS- és nem LTS-verziókon futó C#-függvények támogatásához .NET és .NET-keretrendszer. Az izolált feldolgozói folyamatfüggvények bővítményei névtereket használnak
Microsoft.Azure.Functions.Worker.Extensions.*
. - Folyamaton belüli modell: Lefordított C# függvény, amely ugyanabban a folyamatban fut, mint a Functions-futtatókörnyezet. A modell egy változatában a Functions C#-szkriptekkel futtatható, amely elsősorban a C#-portál szerkesztéséhez támogatott. A folyamaton belüli függvények bővítményei névtereket használnak
Microsoft.Azure.WebJobs.Extensions.*
.
Fontos
A folyamaton belüli modell támogatása 2026. november 10-én megszűnik. Erősen javasoljuk, hogy az alkalmazásokat az elkülönített feldolgozói modellbe migrálja a teljes támogatás érdekében.
//<docsnippet_fixed_delay_retry_example>
[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));
Az alábbi példafüggvény öt percenként aktiválja és hajtja végre. A @TimerTrigger
függvény széljegyzete a CRON-kifejezésekkel megegyező sztringformátummal határozza meg az ütemezést.
@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);
}
Az alábbi példa egy időzítő-eseményindító kötését és a kötést használó függvénykódot mutatja be, ahol az időzítőt képviselő példányt a rendszer átadja a függvénynek. A függvény naplót ír, amely jelzi, hogy ez a függvényhívás egy kihagyott ütemezési esemény miatt van-e. A példa attól függ, hogy a v1 vagy v2 Python programozási modellt használja-e.
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=True)
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)
Az alábbi példa egy időzítő trigger TypeScript függvényét mutatja be.
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,
});
Az alábbi példa egy időzítőindító JavaScript-függvényét mutatja be.
A kötési adatok a function.json fájlban:
{
"schedule": "0 */5 * * * *",
"name": "myTimer",
"type": "timerTrigger",
"direction": "in"
}
A run.ps1 fájlban az időzítőfüggvény kódja a következő:
# 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"
Attribútumok
A folyamatban lévő C#-kódtár a Microsoft.Azure.WebJobs.Extensions TimerTriggerAttribute függvényt használja, míg az izolált feldolgozói folyamat C# könyvtára a Microsoft.Azure.Functions.Worker.Extensions.Timer függvényt használja a függvény definiálásához. A C#-szkript ehelyett function.json konfigurációs fájlt használ.
Attribútumtulajdonság | Leírás |
---|---|
Ütemezés | CRON-kifejezés vagy TimeSpan-érték. Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható. Az ütemezési kifejezést elhelyezheti egy alkalmazásbeállításban, és beállíthatja ezt a tulajdonságot a jelekbe % burkolt alkalmazásbeállítás nevére, például %ScheduleAppSetting% . |
RunOnStartup | Ha true , a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet elindul például akkor, amikor a függvényalkalmazás felébred, miután inaktivitás miatt tétlen állapotba került, amikor a függvényalkalmazás a függvény változásai miatt újraindul, és amikor a függvényalkalmazás felskálázható. Óvatosan használja. A RunOnStartup-t ritkán kell beállítani true , különösen éles környezetben. |
UseMonitor | Állítsa true vagy false értékre annak megadásához, hogy az ütemezés monitorozva legyen-e. Az ütemezés monitorozása megőrzi az ütemezési eseményeket, így biztosítva az ütemezés megfelelő karbantartását még akkor is, ha a függvényalkalmazás-példányok újraindulnak. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true , amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. Azoknál az ütemezéseknél, amelyek percenként többször aktiválnak, az alapértelmezett érték a .false |
Dekorátorok
Csak a Python v2 programozási modellre vonatkozik.
A dekoratőrrel definiált Python v2-függvények esetében a következő tulajdonságok a schedule
következők:
Tulajdonság | Leírás |
---|---|
arg_name |
Annak a változónak a neve, amely az időzítő objektumot jelöli a függvénykódban. |
schedule |
NCRONTAB-kifejezés vagy TimeSpan-érték. Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható. Az ütemezési kifejezést elhelyezheti egy alkalmazásbeállításban, és beállíthatja ezt a tulajdonságot a táblákba burkolt alkalmazásbeállítási névre, ahogyan ebben a példában % is látható: "%ScheduleAppSetting%". |
run_on_startup |
Ha true , a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet elindul például akkor, amikor a függvényalkalmazás felébred, miután inaktivitás miatt tétlen állapotba került, amikor a függvényalkalmazás a függvény változásai miatt újraindul, és amikor a függvényalkalmazás felskálázható. Óvatosan használja. A runOnStartup-t ritkán kell beállítani true , különösen éles környezetben. |
use_monitor |
Állítsa true vagy false értékre annak megadásához, hogy az ütemezés monitorozva legyen-e. Az ütemezés monitorozása megőrzi az ütemezési eseményeket, így biztosítva az ütemezés megfelelő karbantartását még akkor is, ha a függvényalkalmazás-példányok újraindulnak. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true , amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. Azoknál az ütemezéseknél, amelyek percenként többször aktiválnak, az alapértelmezett érték a .false |
A function.json használatával definiált Python-függvények esetében lásd a Konfiguráció szakaszt.
Jegyzetek
A @TimerTrigger
függvény széljegyzete ugyanazt a schedule
sztringformátumot határozza meg, mint a CRON-kifejezések. A széljegyzet a következő beállításokat támogatja:
Konfiguráció
Csak a Python v1 programozási modellre vonatkozik.
Az alábbi táblázat a metódusnak app.timer()
átadott objektumon options
beállítható tulajdonságokat ismerteti.
Tulajdonság | Leírás |
---|---|
schedule | NCRONTAB-kifejezés vagy TimeSpan-érték. Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható. Az ütemezési kifejezést elhelyezheti egy alkalmazásbeállításban, és beállíthatja ezt a tulajdonságot a táblákba burkolt alkalmazásbeállítási névre, ahogyan ebben a példában % is látható: "%ScheduleAppSetting%". |
runOnStartup | Ha true , a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet elindul például akkor, amikor a függvényalkalmazás felébred, miután inaktivitás miatt tétlen állapotba került, amikor a függvényalkalmazás a függvény változásai miatt újraindul, és amikor a függvényalkalmazás felskálázható. Óvatosan használja. A runOnStartup-t ritkán kell beállítani true , különösen éles környezetben. |
useMonitor | Állítsa true vagy false értékre annak megadásához, hogy az ütemezés monitorozva legyen-e. Az ütemezés monitorozása megőrzi az ütemezési eseményeket, így biztosítva az ütemezés megfelelő karbantartását még akkor is, ha a függvényalkalmazás-példányok újraindulnak. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true , amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. Azoknál az ütemezéseknél, amelyek percenként többször aktiválnak, az alapértelmezett érték a .false |
Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti.
function.json tulajdonság | Leírás |
---|---|
type | "timerTrigger" értékre kell állítani. Ez a tulajdonság automatikusan be van állítva, amikor létrehozza az eseményindítót az Azure Portalon. |
direction | "in" értékre kell állítani. Ez a tulajdonság automatikusan be van állítva, amikor létrehozza az eseményindítót az Azure Portalon. |
név | Annak a változónak a neve, amely az időzítő objektumot jelöli a függvénykódban. |
schedule | NCRONTAB-kifejezés vagy TimeSpan-érték. Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható. Az ütemezési kifejezést elhelyezheti egy alkalmazásbeállításban, és beállíthatja ezt a tulajdonságot a táblákba burkolt alkalmazásbeállítási névre, ahogyan ebben a példában % is látható: "%ScheduleAppSetting%". |
runOnStartup | Ha true , a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet elindul például akkor, amikor a függvényalkalmazás felébred, miután inaktivitás miatt tétlen állapotba került, amikor a függvényalkalmazás a függvény változásai miatt újraindul, és amikor a függvényalkalmazás felskálázható. Óvatosan használja. A runOnStartup-t ritkán kell beállítani true , különösen éles környezetben. |
useMonitor | Állítsa true vagy false értékre annak megadásához, hogy az ütemezés monitorozva legyen-e. Az ütemezés monitorozása megőrzi az ütemezési eseményeket, így biztosítva az ütemezés megfelelő karbantartását még akkor is, ha a függvényalkalmazás-példányok újraindulnak. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true , amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. Azoknál az ütemezéseknél, amelyek percenként többször aktiválnak, az alapértelmezett érték a .false |
Helyi fejlesztéskor adja hozzá az alkalmazásbeállításokat a gyűjtemény local.settings.json fájljáhozValues
.
Figyelemfelhívás
Ne állítsa a runOnStartup parancsot élesre true
. Ezzel a beállítással a kód végrehajtása rendkívül kiszámíthatatlan időpontokban történik. Bizonyos éles beállítások esetén ezek a további végrehajtások jelentősen magasabb költségeket eredményezhetnek a használatalapú csomagban üzemeltetett alkalmazások esetében. Ha például a runOnStartup engedélyezve van, a rendszer meghívja az eseményindítót a függvényalkalmazás méretezésekor. A runOnStartup éles környezetben való engedélyezése előtt győződjön meg arról, hogy teljes mértékben tisztában van a függvények éles viselkedésével.
A teljes példákért tekintse meg a Példa szakaszt .
Használat
Időzítő eseményindító függvény meghívásakor a függvény egy időzítőobjektumot ad át. Az alábbi JSON egy példa az időzítő objektumra.
{
"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
}
A isPastDue
tulajdonság az, true
amikor az aktuális függvényhívás későbbi, mint ütemezett. Egy függvényalkalmazás újraindítása például a meghívás kihagyását okozhatja.
NCRONTAB-kifejezések
Az Azure Functions az NCronTab kódtár használatával értelmezi az NCRONTAB-kifejezéseket. Az NCRONTAB kifejezés hasonló a CRON-kifejezéshez, azzal a kivételével, hogy az elején egy további hatodik mezőt tartalmaz, amelyet másodpercek alatt használnak az idő pontosságához:
{second} {minute} {hour} {day} {month} {day-of-week}
Minden mező a következő típusú értékek egyikével rendelkezhet:
Típus | Példa | Aktivált állapotban |
---|---|---|
Egy adott érték | 0 5 * * * * |
A nap minden órájában egyszer, óránként 5. percben |
Minden érték (* ) |
0 * 5 * * * |
Az óra minden percében, az 5. órában |
Tartomány (- operátor) |
5-7 * * * * * |
Percenként háromszor – 5–7 másodpercben minden nap minden órájának minden percében |
Értékek halmaza (, operátor) |
5,8,10 * * * * * |
Percenként háromszor – 5, 8 és 10 másodpercben minden nap minden órájának minden percében |
Intervallumérték (/ operátor) |
0 */5 * * * * |
Óránként 12-szer - minden nap minden órájának 5. percének második 0-ján |
Hónapok vagy napok megadásához numerikus értékeket, neveket vagy nevek rövidítéseit használhatja:
- Napokra a numerikus értékek 0 és 6 között vannak, ahol a 0 vasárnap kezdődik.
- A nevek angolul vannak. Például:
Monday
,January
. - A nevek nem érzékenyek a kis- és nagybetűkre.
- A nevek rövidítve is lehetnek. A rövidítésekhez három betű használatát javasoljuk. Például:
Mon
,Jan
.
NCRONTAB-példák
Íme néhány példa az Azure Functions időzítő eseményindítójára használható NCRONTAB-kifejezésekre.
Példa | Aktivált állapotban |
---|---|
0 */5 * * * * |
öt percenként egyszer |
0 0 * * * * |
minden óra tetején egyszer |
0 0 */2 * * * |
két óránként egyszer |
0 0 9-17 * * * |
óránként 9:00 és 17:00 között |
0 30 9 * * * |
minden nap 9:30-kor |
0 30 9 * * 1-5 |
minden hétköznap 9:30-kor |
0 30 9 * Jan Mon |
januárban minden hétfőn 9:30-kor |
Feljegyzés
Az NCRONTAB kifejezés öt és hat mezőformátumot is támogat. A hatodik mezőpozíció egy másodperces érték, amely a kifejezés elején van elhelyezve. Ha a CRON-kifejezés érvénytelen, az Azure Portal függvénytesztje 404-es hibát jelenít meg, ha az Application Insights csatlakoztatva van, a rendszer további részleteket naplóz.
NCRONTAB időzónák
Az NCRONTAB-kifejezésben szereplő számok időre és dátumra vonatkoznak, nem időtartományra. A mező 5-öse hour
például 5:00-ra hivatkozik, nem pedig 5 óránként.
A CRON-kifejezések esetén használt alapértelmezett időzóna az egyezményes világidő (UTC). Ha a CRON-kifejezést egy másik időzóna alapján szeretné beállítani, hozzon létre egy alkalmazásbeállítást a függvényalkalmazáshoz.WEBSITE_TIME_ZONE
A beállítás értéke az operációs rendszertől és a függvényalkalmazás alapjául szolgáló csomagtól függ.
Operációs rendszer | Csomag | Érték |
---|---|---|
A Windows | Mind | Állítsa be az értéket a kívánt időzóna nevére a Windows parancs által megadott párok második sora alapján tzutil.exe /L |
Linux | Prémium Dedikált |
Állítsa be az értéket a kívánt időzóna nevére a tz-adatbázisban látható módon. |
Feljegyzés
WEBSITE_TIME_ZONE
és TZ
jelenleg nem támogatottak, ha a Linuxon futó használatalapú csomagban futnak. Ebben az esetben ssl-sel kapcsolatos problémákat állíthat be WEBSITE_TIME_ZONE
vagy TZ
hozhat létre, és a metrikák leállhatnak az alkalmazás működésében.
Például az USA keleti ideje (amelyet Eastern Standard Time
a (Windows) vagy America/New_York
a (Linux) képviselnek) jelenleg UTC-05:00-t használ a téli idő szerint, és UTC-04:00-t a nyári időszámítás során. Ha minden nap 10:00-kor szeretné aktiválni az időzítőt, hozzon létre egy alkalmazásbeállítást a függvényalkalmazáshozWEBSITE_TIME_ZONE
, állítsa az értéket (Windows) vagy America/New_York
(Linux) értékre Eastern Standard Time
, majd használja a következő NCRONTAB kifejezést:
"0 0 10 * * *"
Ha használja WEBSITE_TIME_ZONE
az időt, a megadott időzónában az idő megváltozik, beleértve a nyári időszámítást és a téli idő változásait.
időtartam
Az A TimeSpan
csak App Service-csomagon futó függvényalkalmazásokhoz használható.
Az NCRONTAB-kifejezéssel ellentétben egy TimeSpan
érték határozza meg az egyes függvényhívások közötti időintervallumot. Ha egy függvény a megadott időköznél hosszabb futás után befejeződik, az időzítő azonnal újra meghívja a függvényt.
Sztringként kifejezve a TimeSpan
formátum hh:mm:ss
hh
24-nél kisebb. Ha az első két számjegy 24 vagy annál nagyobb, a formátum a következő dd:hh:mm
. Íme néhány példa:
Példa | Aktivált állapotban |
---|---|
"01:00:00" | óránként |
"00:01:00" | percenként |
"25:00:00:00" | 25 naponta |
"1.00:00:00" | minden nap |
Kiterjesztés
Ha egy függvényalkalmazás több példányra skálázódik, az időzítő által aktivált függvények egyetlen példánya fut az összes példányon. Nem aktiválódik újra, ha még mindig fut egy folyamatban lévő hívás.
A Storage-t megosztó függvényalkalmazások
Ha olyan függvényalkalmazások között oszt meg tárfiókokat, amelyek nincsenek üzembe helyezve az App Service-ben, előfordulhat, hogy explicit módon kell hozzárendelnie a gazdagépazonosítót az egyes alkalmazásokhoz.
Functions-verzió | Beállítás |
---|---|
2.x (és újabb) | AzureFunctionsWebHost__hostid környezeti változó |
1.x | id host.json |
Kihagyhatja az azonosító értéket, vagy manuálisan beállíthatja az egyes függvényalkalmazások azonosítási konfigurációját egy másik értékre.
Az időzítő-eseményindító tárterület-zárolással biztosítja, hogy csak egy időzítőpéldány legyen, ha egy függvényalkalmazás több példányra skálázódik. Ha két függvényalkalmazás azonos azonosító konfigurációval rendelkezik, és mindegyik időzítő eseményindítót használ, csak egy időzítő fut.
Újrapróbálkozás viselkedése
Az üzenetsor-eseményindítóval ellentétben az időzítő eseményindítója nem próbálkozik újra egy függvény meghibásodása után. Ha egy függvény meghibásodik, a program csak a következő időpontban hívja meg újra az ütemezést.
Időzítő eseményindító manuális meghívása
Az Azure Functions időzítő eseményindítója egy HTTP-webhookot biztosít, amely meghívható a függvény manuális aktiválásához. Ez rendkívül hasznos lehet a következő helyzetekben.
- Integrációs tesztelés
- Pontcserék füstteszt vagy bemelegítési tevékenység részeként
- Egy függvény kezdeti üzembe helyezése, amely azonnal feltölt egy gyorsítótárat vagy egy keresési táblát egy adatbázisban
Az időzítő által aktivált függvény manuális meghívásának részleteiért tekintse meg a nem HTTP által aktivált függvények manuális futtatását.
Hibaelhárítás
Ha tudni szeretné, hogy mi a teendő, ha az időzítő eseményindítója nem a várt módon működik, tekintse meg az időzítő által aktivált függvényekkel kapcsolatos problémák kivizsgálását és jelentését, amelyek nem aktiválódnak.