2015-12-01 10 views
6

Ich erstelle ein neues Azure WebJob-Projekt - das scheint eine ausgefeilte Version einer Konsolenanwendung zu sein, die als Web-Job ausgeführt werden kann.Geplantes WebJob

Ich möchte diesen Job basierend auf einem Zeitplan ausführen, aber in der Main() Methode - siehe unten - Microsoft gibt Ihnen die host.RunAndBlock() für den Job kontinuierlich ausgeführt werden.

Muss ich das ändern, wenn der Job in regelmäßigen Abständen ausgeführt werden soll?

static void Main() 
{ 
    var host = new JobHost(); 

    // The following code ensures that the WebJob will be running continuously 
    host.RunAndBlock(); 
} 

Antwort

25

Wenn das Azure WebJobs SDK verwenden, können Sie TimerTrigger verwenden Job-Funktionen zu deklarieren, die auf laufen ein Zeitplan. Zum Beispiel ist hier eine Funktion, die sofort beim Start ausgeführt wird, dann alle zwei Stunden danach:

public static void StartupJob(
[TimerTrigger("0 0 */2 * * *", RunOnStartup = true)] TimerInfo timerInfo) 
{ 
    Console.WriteLine("Timer job fired!"); 
} 

Sie TimerTrigger und andere Erweiterungen durch die Installation des Microsoft.Azure.WebJobs.Extensions nuget Pakets zu bekommen. Weitere Informationen über TimerTrigger und die anderen Erweiterungen in diesem Paket und wie Sie sie verwenden, finden Sie in der azure-webjobs-sdk-extensions repo. Wenn Sie die TimerTrigger verwenden, achten Sie darauf, einen Anruf zu config.UseTimers() zu Ihrem Startup-Code hinzuzufügen, um die Erweiterung zu registrieren.

Bei Verwendung des Azure SDK WebJobs Sie Ihren Code ein Continuous WebJob, mit AlwaysOn aktiviert bereitstellen. Sie können dann beliebig viele geplante Funktionen in diesem WebJob hinzufügen.

+0

ausgezeichnet, suchte nach diesem Attribut für Alter –

1

Es gibt 2 Möglichkeiten, die ich kenne einen Web-Job für die Planung anstatt es continiously laufen:

1.Erstellen eine geplante WebJob eines Cron-Ausdruck mit

2.Create einem geplanten WebJob verwendet, kann die Azure Scheduler

Sie die Dokumentation für beide hier Wege finden:

https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/

Ich glaube, Sie RunAndBlock bei Spiel oder Continuous benötigen, aber Sie können es entfernen, wenn Sie Ihren Job als On-Demand haben

+0

[link] (https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/) scheint zu brechen –

+0

@NigelBelham Aktualisiert den Link, danke für die heads up – Aram

2

Eine einfache Möglichkeit, einen WebJob nach einem Zeitplan auszulösen, besteht darin, ihn als eine normale Konsolenanwendung zu codieren und einfach einen 'settings.job' mit der Cron-basierten Scheduling-Konfiguration zum Projekt hinzuzufügen. Zum Beispiel würde die folgende Definition es auslösen alle 5 Minuten:

{ 
    "schedule": "0 */5 * * * *" 
} 

Keine Notwendigkeit JobHost zu bedienen, einfach Ihre WebApp stellen Sie sicher, ist so konfiguriert, wie ‚Always On‘. Sie sollten den Job dann als ausgelösten WebJob bereitstellen.

+0

Ich zweite dies als der bessere Ansatz, da es völlig agnostisch zu Ihrem WebJob binary (dh Sie könnten Zeit auslösen eine C++ - Binär geschrieben vor 14 Jahren mit Null-Modifikation) - https://github.com/projectkudu/kudu/wiki/Web-Jobs#scheduling-a-triggered-webjob – evilSnobu