Grundsätzlich habe ich eine Aufgabe, Rechnung zu generieren. Also habe ich eine Funktion generate_invoice()
in meiner tasks.py Datei erstellt.Wie Sie Sellerie periodische Aufgabe an jedem Ende des Monats ausführen
Jetzt verwende ich @periodic_task
, um die Funktion aufzurufen. Aber ich brauche meine Aufgabe nur am letzten Tag des Monats zu laufen um 23:55 Uhr - 23:57 Uhr.
Ich bin den letzten Tag des Monats mit dieser Funktion bekommen:
def get_last_date():
today = timezone.now()
year = today.year
month = today.month
last_date = calendar.monthrange(year, month)[1]
return str(last_date)
Mein Code für Aufgabe wie folgt aussieht:
@periodic_task(run_every=(crontab(day_of_month=get_last_date())), name="invoice_simulation", ignore_result=True)
def invoice_simulation():
generate_invoice()
Aber das funktioniert nicht!
Oder gibt es eine bessere Möglichkeit, diese Funktion zu implementieren, dann schlagen Sie bitte vor.
Wie ich diese Aufgabe gemacht habe: Erhalten Sie den ersten Tag des nächsten Monats (00.01 Uhr), konvertieren in dt obj und subtrahieren Sie 5 Minuten. Ich glaube nicht, dass es einen leichten "Lauf alle" gibt, da das relativ zum Monat ist. Wenn Sie "laufen" kann dies funktionieren. Mein Exp ist nicht in Sellerie, da ich meine eigenen Wrapper und Cron-Aufgaben im Allgemeinen von Grund auf geschrieben habe, so dass diese Lösung nicht sauber konvertieren kann. Wir hatten genau das gleiche Problem in einem Start-up und dieser Ansatz hat gut funktioniert. –