Azure işlevleri için Zamanlayıcı tetikleyicisiTimer trigger for Azure Functions

Bu makalede, Azure işlevleri'nde Zamanlayıcı tetikleyici ile nasıl çalışılacağı açıklanmaktadır.This article explains how to work with timer triggers in Azure Functions. Bir işlev bir zamanlamaya göre çalışan bir zamanlayıcı tetikleyicisi sağlar.A timer trigger lets you run a function on a schedule.

Azure işlevleri geliştiricileri için başvuru bilgileri budur.This is reference information for Azure Functions developers. Azure işlevleri'ne yeni başladıysanız, aşağıdaki kaynaklarla başlayın:If you're new to Azure Functions, start with the following resources:

Paketler - 1.x işlevleriPackages - Functions 1.x

Zamanlayıcı tetikleyicisi sağlanan Microsoft.Azure.WebJobs.Extensions NuGet paketi sürüm 2.x.The timer trigger is provided in the Microsoft.Azure.WebJobs.Extensions NuGet package, version 2.x. Paket için kaynak kodu konusu azure webjobs sdk uzantıları GitHub deposu.Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

Bu bağlama için destek, tüm geliştirme ortamlarında otomatik olarak sağlanır.Support for this binding is automatically provided in all development environments. Paketini el ile veya uzantısını kaydetmek gerekmez.You don't have to manually install the package or register the extension.

Paketler - 2.x işlevleriPackages - Functions 2.x

Zamanlayıcı tetikleyicisi sağlanan Microsoft.Azure.WebJobs.Extensions NuGet paketi sürüm 3.x.The timer trigger is provided in the Microsoft.Azure.WebJobs.Extensions NuGet package, version 3.x. Paket için kaynak kodu konusu azure webjobs sdk uzantıları GitHub deposu.Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

Bu bağlama için destek, tüm geliştirme ortamlarında otomatik olarak sağlanır.Support for this binding is automatically provided in all development environments. Paketini el ile veya uzantısını kaydetmek gerekmez.You don't have to manually install the package or register the extension.

ÖrnekExample

Dile özgü örneğe bakın:See the language-specific example:

C# örneğiC# example

Aşağıdaki örnekte gösterildiği bir C# işlevi , yürütüldüğünde dakikanız bir bölünebilen her zaman ile beş (örn işlevi 18:57: 00'da başlar, sonraki performans 19:00: 00'da olacaktır).The following example shows a C# function that is executed each time the minutes have a value divisible by five (eg if the function starts at 18:57:00, the next performance will be at 19:00:00). TimerInfo Nesne işleve geçirilir.The TimerInfo object is passed into the function.

[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}");
}

C# betiği örneğiC# script example

Aşağıdaki örnek, bir zamanlayıcı tetikleyicisi bağlama gösterir. bir function.json dosyası ve bir C# betik işlevi bağlama kullanan.The following example shows a timer trigger binding in a function.json file and a C# script function that uses the binding. İşlev, bu işlev çağrısını bir eksik zamanlama yinelenme nedeniyle olup olmadığını belirten bir günlüğe yazar.The function writes a log indicating whether this function invocation is due to a missed schedule occurrence. TimerInfo Nesne işleve geçirilir.The TimerInfo object is passed into the function.

Veri bağlama işte function.json dosyası:Here's the binding data in the function.json file:

{
    "schedule": "0 */5 * * * *",
    "name": "myTimer",
    "type": "timerTrigger",
    "direction": "in"
}

C# betik kodunu şu şekildedir:Here's the C# script code:

public static void Run(TimerInfo myTimer, ILogger log)
{
    if (myTimer.IsPastDue)
    {
        log.LogInformation("Timer is running late!");
    }
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}" );  
}

F#ÖrnekF# example

Aşağıdaki örnek, bir zamanlayıcı tetikleyicisi bağlama gösterir. bir function.json dosyası ve bir F# betik işlevi bağlama kullanan.The following example shows a timer trigger binding in a function.json file and an F# script function that uses the binding. İşlev, bu işlev çağrısını bir eksik zamanlama yinelenme nedeniyle olup olmadığını belirten bir günlüğe yazar.The function writes a log indicating whether this function invocation is due to a missed schedule occurrence. TimerInfo Nesne işleve geçirilir.The TimerInfo object is passed into the function.

Veri bağlama işte function.json dosyası:Here's the binding data in the function.json file:

{
    "schedule": "0 */5 * * * *",
    "name": "myTimer",
    "type": "timerTrigger",
    "direction": "in"
}

İşte F# betik kodu:Here's the F# script code:

let Run(myTimer: TimerInfo, log: ILogger ) =
    if (myTimer.IsPastDue) then
        log.LogInformation("F# function is running late.")
    let now = DateTime.Now.ToLongTimeString()
    log.LogInformation(sprintf "F# function executed at %s!" now)

JavaScript örneğiJavaScript example

Aşağıdaki örnek, bir zamanlayıcı tetikleyicisi bağlama gösterir. bir function.json dosyası ve bir JavaScript işlevi bağlama kullanan.The following example shows a timer trigger binding in a function.json file and a JavaScript function that uses the binding. İşlev, bu işlev çağrısını bir eksik zamanlama yinelenme nedeniyle olup olmadığını belirten bir günlüğe yazar.The function writes a log indicating whether this function invocation is due to a missed schedule occurrence. A Zamanlayıcı nesne işleve geçirilir.A timer object is passed into the function.

Veri bağlama işte function.json dosyası:Here's the binding data in the function.json file:

{
    "schedule": "0 */5 * * * *",
    "name": "myTimer",
    "type": "timerTrigger",
    "direction": "in"
}

JavaScript kod aşağıdaki gibidir:Here's the JavaScript code:

module.exports = function (context, myTimer) {
    var timeStamp = new Date().toISOString();

    if (myTimer.IsPastDue)
    {
        context.log('Node is running late!');
    }
    context.log('Node timer trigger function ran!', timeStamp);   

    context.done();
};

Java örnekJava example

Aşağıdaki örnek işlevi tetikler ve beş dakikada çalıştırılır.The following example function triggers and executes every five minutes. @TimerTrigger İşlev üzerindeki ek açıklama tanımlar aynı dize biçimi kullanarak zamanlama sıralanmış iş ifadeleri.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);
}

ÖzniteliklerAttributes

İçinde C# sınıfı kitaplıklar, kullanın TimerTriggerAttribute.In C# class libraries, use the TimerTriggerAttribute.

Özniteliğin Oluşturucusu bir CRON ifadesi alır veya TimeSpan.The attribute's constructor takes a CRON expression or a TimeSpan. Kullanabileceğiniz TimeSpan yalnızca işlev uygulamasını bir App Service planı üzerinde çalışıyorsa.You can use TimeSpan only if the function app is running on an App Service plan. Aşağıdaki örnek, bir CRON ifadesi gösterir:The following example shows a CRON expression:

[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}");
}

YapılandırmaConfiguration

Aşağıdaki tabloda ayarladığınız bağlama yapılandırma özelliklerini açıklayan function.json dosya ve TimerTrigger özniteliği.The following table explains the binding configuration properties that you set in the function.json file and the TimerTrigger attribute.

Function.JSON özelliğifunction.json property Öznitelik özelliğiAttribute property AçıklamaDescription
typetype yokn/a "TimerTrigger için" olarak ayarlanmalıdır.Must be set to "timerTrigger". Bu özellik, Azure portalında tetikleyicisi oluşturduğunuzda otomatik olarak ayarlanır.This property is set automatically when you create the trigger in the Azure portal.
directiondirection yokn/a "İçin" ayarlanmalıdır.Must be set to "in". Bu özellik, Azure portalında tetikleyicisi oluşturduğunuzda otomatik olarak ayarlanır.This property is set automatically when you create the trigger in the Azure portal.
Adıname yokn/a İşlev kodunu Zamanlayıcı nesneyi temsil eden değişken adı.The name of the variable that represents the timer object in function code.
scheduleschedule ScheduleExpressionScheduleExpression A CRON ifadesi veya TimeSpan değeri.A CRON expression or a TimeSpan value. A TimeSpan bir App Service planı üzerinde çalıştırılan bir işlev uygulaması için kullanılabilir.A TimeSpan can be used only for a function app that runs on an App Service Plan. Bir uygulama ayarında zamanlama ifadeyi ve ayar adı içinde sarmalanmış bir uygulama için bu özelliği ayarlayın % Bu örnekte olduğu gibi işaretlere: "% ScheduleAppSetting %".You can put the schedule expression in an app setting and set this property to the app setting name wrapped in % signs, as in this example: "%ScheduleAppSetting%".
runOnStartuprunOnStartup runOnStartupRunOnStartup Varsa true, çalışma zamanı başladığında işlevi çağrılır.If true, the function is invoked when the runtime starts. Örneğin, işlev uygulaması uyanır eylemsizlik nedeniyle boşta filtrelemesinden geçtikten sonra çalışma zamanı başlatır.For example, the runtime starts when the function app wakes up after going idle due to inactivity. ne zaman işlev uygulaması, işlev değişiklikleri nedeniyle ve işlev uygulamasını kullanıma ölçeklendirildiğinde yeniden başlatır. Bu nedenle runOnStartup olursa, nadiren hiç ayarlanmalıdır true, özellikle de üretim.when the function app restarts due to function changes, and when the function app scales out. So runOnStartup should rarely if ever be set to true, especially in production.
useMonitoruseMonitor useMonitorUseMonitor Kümesine true veya false zamanlama izlenmesi gereken olup olmadığını belirtmek için.Set to true or false to indicate whether the schedule should be monitored. İzleme zamanlaması bile işlevi uygulama örneklerini yeniden başlattığınızda zamanlama doğru yönetilmesini sağlamak yardımcı olmak için zamanlama örnekleri'ni kalıcıdır.Schedule monitoring persists schedule occurrences to aid in ensuring the schedule is maintained correctly even when function app instances restart. Açıkça ayarlanmazsa varsayılan olup olmadığını true bir yinelenme aralığı 1 dakikadan daha uzun olan zamanlamalar.If not set explicitly, the default is true for schedules that have a recurrence interval greater than 1 minute. Dakika başına birden çok kez tetikleyen zamanlamalar için varsayılandır false.For schedules that trigger more than once per minute, the default is false.

Uygulama ayarları yerel olarak geliştirirken tarihinden local.settings.json dosyasında.When you're developing locally, app settings go into the local.settings.json file.

Dikkat

Ayar karşı öneririz runOnStartup için true üretimde.We recommend against setting runOnStartup to true in production. Bu ayar kullanılarak yüksek oranda beklenmeyen zamanlarda execute kodunu sağlar.Using this setting makes code execute at highly unpredictable times. Bu ek yürütmeleri belirli üretim ayarlarında tüketim planlarında barındırılan uygulamalar için önemli ölçüde daha yüksek maliyetleri neden olabilir.In certain production settings, these extra executions can result in significantly higher costs for apps hosted in Consumption plans. Örneğin, runOnStartup işlev uygulamanızı ölçeklendirilir çağrılır tetikleyici etkin.For example, with runOnStartup enabled the trigger in invoked whenever your function app is scaled. Tam olarak anlamanız işlevlerinizi üretim davranışını etkinleştirmeden önce emin runOnStartup üretimde.Make sure you fully understand the production behavior of your functions before enabling runOnStartup in production.

KullanımUsage

Bir zamanlayıcı tetikleyicisi işlevi çağrıldığında Zamanlayıcı nesne işleve geçirilir.When a timer trigger function is invoked, a timer object is passed into the function. Aşağıdaki JSON bir zamanlayıcı nesne örneği gösterimidir.The following JSON is an example representation of the timer object.

{
    "Schedule":{
    },
    "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
}

IsPastDue Özelliği true geçerli işlev çağrısını olduğunda zamanlanmış daha.The IsPastDue property is true when the current function invocation is later than scheduled. Örneğin, bir işlevi uygulamanın yeniden eksik için çağrıya neden olabilir.For example, a function app restart might cause an invocation to be missed.

Sıralanmış iş ifadeleriCRON expressions

Azure işlevleri kullanan NCronTab sıralanmış iş ifadeleri olarak yorumlamak için kitaplığı.Azure Functions uses the NCronTab library to interpret CRON expressions. Bir CRON ifadesi altı alanları içerir:A CRON expression includes six fields:

{second} {minute} {hour} {day} {month} {day-of-week}

Her bir alan, şu tür değerlerden biri olabilir:Each field can have one of the following types of values:

TypeType ÖrnekExample TetiklendiğindeWhen triggered
Belirli bir değerA specific value "0 5 * * * *""0 5 * * * *" hh:05:00 hh olduğu her saat (saatte bir)at hh:05:00 where hh is every hour (once an hour)
Tüm değerleri (*)All values (*) "0 * 5 * * *""0 * 5 * * *" 5:mm adresindeki: her gün 00 mm (60 günde kez) saat, dakika başı olduğuat 5:mm:00 every day, where mm is every minute of the hour (60 times a day)
Aralık (- işleci)A range (- operator) "5-7 * * * * *""5-7 * * * * *" hh:mm:05, hh:mm:06 ve hh:mm:07 ss: dd olduğu her saat (3 kez dakika), dakika başıat hh:mm:05,hh:mm:06, and hh:mm:07 where hh:mm is every minute of every hour (3 times a minute)
Bir değerler kümesi (, işleci)A set of values (, operator) "5,8,10 * * * * *""5,8,10 * * * * *" hh:mm:05, hh:mm:08 ve hh:mm:10 ss: dd olduğu her saat (3 kez dakika), dakika başıat hh:mm:05,hh:mm:08, and hh:mm:10 where hh:mm is every minute of every hour (3 times a minute)
Aralık değeri (/ işleci)An interval value (/ operator) "0 */5 * * * *""0 */5 * * * *" hh:05:00, hh:10:00, da hh:15:00, aracılığıyla ve benzeri hh:55:00 hh olduğu her saat (12 kat bir saat)at hh:05:00, hh:10:00, hh:15:00, and so on through hh:55:00 where hh is every hour (12 times an hour)

Aylık veya gün belirtmek için sayısal değerler, adları veya adlarının kısaltmalarını kullanabilirsiniz:To specify months or days you can use numeric values, names, or abbreviations of names:

  • Gün boyunca sayısal 6 0 0 ile Pazar başladığı değerlerdir.For days, the numeric values are 0 to 6 where 0 starts with Sunday.
  • İngilizce dilinde adlarıdır.Names are in English. Örneğin: Monday, January.For example: Monday, January.
  • Adları büyük/küçük harfe duyarsızdır.Names are case-insensitive.
  • Adları kısaltılmış.Names can be abbreviated. Üç harf olduğundan önerilen kısaltması uzunluğu.Three letters is the recommended abbreviation length. Örneğin: Mon, Jan.For example: Mon, Jan.

CRON örnekleriCRON examples

Azure işlevleri'nde Zamanlayıcı tetikleyicisi için kullanabileceğiniz sıralanmış iş ifadeleri bazı örnekleri aşağıda verilmiştir.Here are some examples of CRON expressions you can use for the timer trigger in Azure Functions.

ÖrnekExample TetiklendiğindeWhen triggered
"0 */5 * * * *" beş dakikada bir kezonce every five minutes
"0 0 * * * *" sonra her saat başındaonce at the top of every hour
"0 0 */2 * * *" Her iki saatte bir kezonce every two hours
"0 0 9-17 * * *" saatte bir kez gelen 09: 00-17once every hour from 9 AM to 5 PM
"0 30 9 * * *" her gün 09:30:00at 9:30 AM every day
"0 30 9 * * 1-5" Haftanın her günü 09:30:00at 9:30 AM every weekday
"0 30 9 * Jan Mon" 9: 30'da Ocak Ayındaki her Pazartesiat 9:30 AM every Monday in January

Not

CRON ifadesi çevrimiçi örnekleri bulabilirsiniz, ancak çoğu atlamak {second} alan.You can find CRON expression examples online, but many of them omit the {second} field. Eksik bir tanesi kopyalarsanız, ekleme {second} alan.If you copy from one of them, add the missing {second} field. Genellikle, bu alanda bir yıldız sıfır istersiniz.Usually you'll want a zero in that field, not an asterisk.

CRON saat dilimleriCRON time zones

Bir saat ve tarih, zaman aralığı için bir CRON ifadesi sayıları bakın.The numbers in a CRON expression refer to a time and date, not a time span. Örneğin, 5'te hour alan 5: 00'da, her 5 saat ifade eder.For example, a 5 in the hour field refers to 5:00 AM, not every 5 hours.

Sıralanmış iş ifadeleri ile kullanılan varsayılan saat dilimini Eşgüdümlü Evrensel Saat (UTC) ' dir.The default time zone used with the CRON expressions is Coordinated Universal Time (UTC). Başka bir saat dilimi temel alınarak, CRON ifadesi için adlı işlev uygulamanız için bir uygulama ayarı oluşturmak WEBSITE_TIME_ZONE.To have your CRON expression based on another time zone, create an app setting for your function app named WEBSITE_TIME_ZONE. Gösterildiği gibi değeri istenen saat dilimi adını ayarlayın Microsoft saat dilimi dizin.Set the value to the name of the desired time zone as shown in the Microsoft Time Zone Index.

Örneğin, Doğu Standart Saati UTC-05:00.For example, Eastern Standard Time is UTC-05:00. Ateş 10 11.00 EST her gün tetikleyin, UTC saat dilimi için hesapları aşağıdaki CRON ifadesi kullanmak, Zamanlayıcı için:To have your timer trigger fire at 10:00 AM EST every day, use the following CRON expression that accounts for UTC time zone:

"schedule": "0 0 15 * * *"

Veya adlı işlev uygulamanız için bir uygulama ayarı oluşturmak WEBSITE_TIME_ZONE ve değerine Doğu Standart Saati.Or create an app setting for your function app named WEBSITE_TIME_ZONE and set the value to Eastern Standard Time. Ardından aşağıdaki CRON ifadesi kullanır:Then uses the following CRON expression:

"schedule": "0 0 10 * * *"

Kullanırken WEBSITE_TIME_ZONE, zaman, gün ışığından yararlanma saatine gibi belirli saat dilimi zaman değişiklikler için ayarlanır.When you use WEBSITE_TIME_ZONE, the time is adjusted for time changes in the specific timezone, such as daylight savings time.

TimeSpanTimeSpan

A TimeSpan bir App Service planı üzerinde çalıştırılan bir işlev uygulaması için kullanılabilir.A TimeSpan can be used only for a function app that runs on an App Service Plan.

Bir CRON ifadesi aksine bir TimeSpan değeri her işlev çağrısını arasındaki zaman aralığını belirtir.Unlike a CRON expression, a TimeSpan value specifies the time interval between each function invocation. Bir işlev belirtilen aralığından daha uzun çalıştırdıktan sonra tamamlandığında, Zamanlayıcıyı hemen işlevi yeniden çağırır.When a function completes after running longer than the specified interval, the timer immediately invokes the function again.

Bir dize olarak ifade edilen TimeSpan biçimi hh:mm:ss olduğunda hh 24 saatten az olduğu.Expressed as a string, the TimeSpan format is hh:mm:ss when hh is less than 24. İlk iki basamak 24 veya daha büyük olduğunda biçimdir dd:hh:mm.When the first two digits are 24 or greater, the format is dd:hh:mm. İşte bazı örnekler:Here are some examples:

ÖrnekExample TetiklendiğindeWhen triggered
"01:00:00""01:00:00" her saatevery hour
"00:01:00""00:01:00" her dakikaevery minute
"24:00:00""24:00:00" her güneveryday

ÖlçeklendirmeScale-out

Zamanlayıcı ile tetiklenen bir işlev yalnızca tek bir örneği, birden fazla örneğe ölçeklendirir çıkış bir işlev uygulaması, tüm örneklerinde çalıştırılır.If a function app scales out to multiple instances, only a single instance of a timer-triggered function is run across all instances.

Depolama paylaşımı işlev uygulamalarıFunction apps sharing Storage

Birden fazla işlev uygulaması arasında bir depolama hesabını paylaşmak, her işlev uygulaması farklı olduğundan emin olun id içinde host.json.If you share a Storage account across multiple function apps, make sure that each function app has a different id in host.json. Atlayabilirsiniz id özelliği veya her işlevi uygulamanın el ile ayarlamanız id için farklı bir değer.You can omit the id property or manually set each function app's id to a different value. Zamanlayıcı tetikleyicisi depolama kilidi olacağına dair yalnızca bir zamanlayıcı örneği birden çok örneği için bir işlev uygulaması kullanıma ölçeklendirildiğinde emin olmak için kullanır.The timer trigger uses a storage lock to ensure that there will be only one timer instance when a function app scales out to multiple instances. İki işlev uygulamaları aynı paylaşıyorsa id ve her bir zamanlayıcı tetikleyicisi kullanan, tek bir zamanlayıcı çalışır.If two function apps share the same id and each uses a timer trigger, only one timer will run.

Yeniden deneme davranışıRetry behavior

Bir işlev başarısız olduktan sonra kuyruk tetikleyicisi, Zamanlayıcı tetikleyicisi yeniden deneme değil.Unlike the queue trigger, the timer trigger doesn't retry after a function fails. Bir işlevi başarısız olduğunda, zamanlamaya göre yeniden açana kadar çağrılır değil.When a function fails, it isn't called again until the next time on the schedule.

Sorun gidermeTroubleshooting

Zamanlayıcı tetikleyicisi beklendiği gibi çalışmıyor ne yapılacağını hakkında daha fazla bilgi için bkz. Investigating ve sorunları raporlama Zamanlayıcı ile tetiklenen değil tetikleme işlevleri.For information about what to do when the timer trigger doesn't work as expected, see Investigating and reporting issues with timer triggered functions not firing.

Sonraki adımlarNext steps