Frage

Wie geschieht dies am besten? Ich möchte eine Anwendung, die auf einem Server läuft jeden Abend um 03:00 Uhr ein Ereignis auszulösen.

War es hilfreich?

Lösung

Verwenden Sie Windows-Taskplaner

Andere Tipps

Wenn Sie diesen Code in laufende App tun wollen (statt einen Taskplaner zu verwenden), sollten Sie eine Dauer wählen Ihre App schlafen zu lassen, die ziemlich lang ist (beispielsweise 1 Stunde oder 3.600 sec). Ihre Anwendung Schleifen und wie jeder Schlaf Anruf abläuft, die App in regelmäßigen Abständen überprüft, wie viel Zeit bis zum Ablauf der Frist Zeit gelassen wird (03.00). Sobald die verbleibende Ruhezeit unter der groben Intervallzeit erhält, soll es auf ein kürzeres Intervall reduziert werden (jedes Mal halbierte, oder bis 10 sec reduziert). Weiter die Schleife, Schlafen und die Intervallzeit zu reduzieren, bis die Ziel Frist Zeit erreicht wird.

Dies verhindert, dass die Schleife aus zu oft aufwacht (86.400 1-Sekunden-Intervalle übertrieben), aber es verhindert auch die App-Schleife die Ziel Frist Zeit von überschieß durch zu lange schlafen.

Sie können einen Timer mit einem Intervall von 1 Sekunde machen und wenn der Timer aktiviert wird, überprüfen, ob es 03.00 Uhr ist.

Sie müssen es in einem Dienst zu bauen, um zu gewährleisten, dass es läuft auch wenn es niemand in die Maschine angemeldet, und dann gibt es viele verschiedene Methoden, um sicherzustellen, dass der Trigger auftritt.

Betrachten sie ein System.Timers.Timer machen, wo der Interval die Differenz zwischen DateTime.Now und den nächsten 03.00 eingestellt ist.

Es gibt zwei grundlegende Möglichkeiten.

Wenn Sie versuchen, dies in einem bestehenden Dienst zu tun, können Sie ein Timer sich jede Nacht um 3:00 auszulösen, und führen Sie Ihre "Aufgabe".

aber sagen, dass dies besser ist in der Regel behandelt über Windows-Taskplaner . Statt die Anwendung am Leben 24/7 zu halten, die Sie gerade es planen einmal um 3:00 jeden Tag zu laufen.


Edit:

Wenn Sie aus dem Code mit dem Taskplaner arbeiten (in einem anderen Kommentar erwähnt), das ist auch möglich. Der Taskplaner bietet ein API zum Einrichten einzelne Aufgaben ( ITask ) über den Task-Scheduler ( ITaskScheduler ).

Angesichts der Tatsache, dass Sie sich auf XP arbeiten Embedded, sind Sie wahrscheinlich besser dran, nur die normalen Systemkonfigurationsfunktionen verwendet wird, und eine Aufgabe einmal pro Tag laufen einrichten. In einem eingebetteten System, sollten Sie genügend Kontrolle während der Bereitstellung haben, dies zu tun.

Hier ist eine vereinfachte Version eines Dienstes ist, dass wir geschrieben, dass ein Timer läuft alle 60 Sekunden, um einen Tisch zu sehen ... Sie könnten das Timer verstreichen Ereignis zu ändern, um die Zeit zu überprüfen, und führen Sie es dann:

Dim Timer As System.Timers.Timer

Protected Overrides Sub OnStart(ByVal args() As String)
    Timer = New System.Timers.Timer(60000)
    AddHandler Timer.Elapsed, AddressOf timer_Elapsed
    Timer.Start()
End Sub

Protected Overrides Sub OnStop()
    Timer2.Stop()
End Sub

Private Sub timer_Elapsed(ByVal pSender As Object, ByVal pargs As System.Timers.ElapsedEventArgs)
    'Ensure the tick happens in the middle of the minute
    If DateTime.Now.Second < 25 Then
        Timer.Interval = 65000
    ElseIf DateTime.Now.Second > 35 Then
        Timer.Interval = 55000
    ElseIf DateTime.Now.Second >= 25 And DateTime.Now.Second <= 35 Then
        Timer.Interval = 60000
    End If

    'Logic goes here
 End Sub

Selbstverständlich, wenn Sie können, den Task-Scheduler wie jeder benutzen andere hier erwähnt. Es ist der bevorzugte Weg, dies zu tun. Ich bin zufällig gerade diesen Code herumliegen, so dachte ich, dass ich es im Fall schreiben würde es für Sie hilfreich sein könnte. Auch dieser Code war für uns, weil wir nie wussten, wenn eine externe Quelle eine Tabelle bearbeiten würde. Einstellen des Intervalls auf eine korrekte Anzahl von Millisekunden würde eine viel effizientere Art und Weise, dies zu tun, wie von md5sum hingewiesen.

Diese Antwort könnte ein bisschen linkes Feld, aber wir verwenden oft CruiseControl.NET einige unserer geplanten Aufgaben. Es ist nicht perfekt für sie alle, aber wenn es eine große Aufgabe ist, die Sie jeden Abend und anderen Code / Ergebnisse davon abhängen ausgeführt werden sollen, dann ist es eine gute Wahl. Sie können es, wann immer, laufen planen E-Mails zu erhalten, wenn es funktioniert / nicht bestanden. Führen Sie andere Skripte / code, wenn es nicht funktioniert hat, aufzuräumen Dateien, die Sie benötigen, bevor Sie beginnen und nach.

Nicht die perfekte Lösung für alle Situation, aber es ist verdammt mächtig für diejenigen, die für sie anrufen. Wir verwenden es für einige unserer großen Datenverarbeitungsaufträge und sendet uns alle eine E-Mail, wenn es funktionierte / nicht bestanden und wird sogar versuchen Sie es erneut 30 Minuten später, wenn es das erste Mal gescheitert. Es gibt Ihnen ein schönes Fuzzy-Gefühl:)

Windows-Taskplaner (wie durch klausbyskov vorgeschlagen) oder einen SQL Server-Auftrag.

EDIT:

Oder wenn Sie einen dyanically zugewiesen Zeit möchten, können Sie einen Windows-Dienst erstellen, der alle 10 Minuten Umfragen und eine Aktion zur gewünschten Zeit führt (s).

einen Windows-Server in C # erstellen ist ziemlich trivial und könnte dies tun . So stellen Sie sicher, dass Sie die Sicherheit und Protokollierung herausgefunden haben, weil es ziemlich schwer zu sagen, was los ist, während es (oder nicht) läuft.

Verwenden Sie System.Threading.Timer .

Ich bin ein Thread in einer ASP.NET-Anwendung Laichen geplanten Aufgaben zu tun.

Es hängt davon ab, was Sie zur Verfügung haben.

Ihre beste Wette ist eine cron Job, wenn Sie unter Linux / Unix sind / Mac OS X, ein Task-Scheduler auf Windows, oder launchd auf neuere Versionen von Mac OS X .

Wenn Sie dies innerhalb einer Anwendung tun mögen, müssen Sie eine Schleife benötigen, die die Zeit in regelmäßigen Abständen und feuert den Fall überprüft, ob es 03.00 Uhr ist, aber das ist nicht ideal.

Ist das Programm in der Lage über die Kommandozeile ausgeführt werden? Wenn ja, erstellen Sie eine foo.bat-Datei und ruft Linie Ihres Programmbefehls (sehr einfach).

Dann benutzen Taskplaner täglich die .bat-Datei um 3 Uhr laufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top