Geplante Aufgaben im Container
- Matt
Cron in einen Container zu packen bedeutet, dass der Container zwei Prozesse hat, das Logging nicht mehr über die Standardausgabe geht und ein Fehlschlag unsichtbar bleibt.
Zwei bessere Wege.
Auf dem Host als systemd-Timer, der docker run --rm mit dem passenden Befehl aufruft. Ergebnis und Laufzeit landen im Journal, Fehlschläge sind sichtbar.
In der Anwendung als BackgroundService, was den Vorteil hat, dass die Aufgabe denselben Container, dieselbe Konfiguration und dasselbe Logging benutzt:
public class AufraeumDienst(TimeProvider zeit) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken token)
{
using var timer = new PeriodicTimer(TimeSpan.FromHours(6), zeit);
while (await timer.WaitForNextTickAsync(token))
await Aufraeumen(token);
}
}
Der TimeProvider im Konstruktor macht das Ganze testbar, was bei einer Aufgabe im Sechsstundentakt der einzige Weg ist, sie je zu prüfen.