2016-07-25 13 views
0

ich einen cron-Job festlegen möchten, die nur mit dem Lauf von App-Motor ui Auslösen (Drücken einer Taste auf app-engine)mache ich einen cron-Job ohne Scheduling

sein Wie kann ich die cron .xml, um keine Zeitplanung zu enthalten?

<?xml version="1.0" encoding="UTF-8"?> 
<cronentries> 
    <cron> 
     <url>/match</url> 
     <description>find buddies to all users</description> 
     <schedule>----?-----</schedule> 
    </cron> 
</cronentries> 

Antwort

0

AFAIK ist dies nicht möglich.

Ich sehe zwei mögliche Alternativen, basierend auf einer Fahne durch die GUI gesteuert, das anzeigt, ob die „cron“ Auftrag ausgeführt werden soll oder nicht:

  • haben einen regelmäßigen cron prüfen nur, ob das Flag gesetzt ist: do die Arbeit, wenn er eingestellt ist und Ausfahrt sofort, wenn es nicht

oder

  • Verwendung the deferred library: wenn die Flagge auch lösen eine verschobene Aufgabe einstellen, die in Neben der Ausführung des Jobs triggert er sich auch selbst, solange das Flag gesetzt ist; Die Deferred-Library ermöglicht auch die Wiederholung der Aufgabe in Sekundenbruchteilen, was mit normalen Cron nicht möglich ist (falls das für Sie von Interesse ist).

Update:

Die zurückgestellte Bibliothek hat mindestens einen Nachteil: kann den Request-Handler innerhalb der latenten Funktion zugreifen. Aber die latente Funktionalität ist auch in den Task Queues (erwähnt von @ jirungaray Antwort) - mit den optionalen countdown oder eta Argumenten taskqueue.add():

  • Countdown - Zeit in Sekunden in die Zukunft, dass diese Aufgabe sollte laufen oder gemietet werden. Der Standardwert ist Null. Geben Sie dieses Argument nicht an, wenn ein Eta angegeben wurde.

  • eta - Eine datetime.datetime, die den absoluten frühesten Zeitpunkt angibt, zu dem die Aufgabe ausgeführt werden sollte. Sie können dieses Argument nicht angeben, wenn das Countdown-Argument angegeben ist. Dieses Argument kann die Zeit zonen- oder zeitzonen-naiv sein oder auf eine Zeit in der Vergangenheit festgelegt sein. Wenn das Argument auf None festgelegt ist, lautet der Standardwert jetzt. Für Pull-Aufgaben kann kein Worker die Aufgabe vor der Zeit leasen, die durch das eta Argument angegeben wird.

Dies macht Aufgabenwarteschlangen besser, die zurückgestellte Bibliothek.

+0

ich brauche es zu Fall, wenn ich den Cron für eine lange Zeit anhalten (einfrieren) will. Sag, es ist eine Debug-App und ich möchte den Cron stoppen. –

-1

Ein Cron-Job ruft einfach Ihren Handler zu einem bestimmten Zeitpunkt an. Wenn Sie nicht möchten, Scheduling, nur Handler im Browser-Fenster eingeben und drücken Sie die Eingabetaste, z.B .:

https://my-app.appspot.com/generate_report 

Das Ergebnis ist das gleiche wie die Taste „Jetzt ausführen“ in der Konsole.

Wenn Sie möchten, können Sie diesen Handler auch mit einem Token schützen, das Ihr Code vor der Ausführung überprüft.

+0

Ich brauche es, wenn ich den Cron für eine lange Zeit anhalten (einfrieren) will. Sag, es ist eine Debug-App und ich möchte den Cron stoppen. –

+0

Cron-Jobs werden für einige Millisekunden ausgeführt. Sie sprechen über eine Aufgabe, die ein Cron-Job startet, aber das ist völlig anders. Es gibt bereits ein Werkzeug, um eine Aufgabe zu stoppen, die in einer Warteschlange durch die Konsole läuft. –

+0

Beachten Sie, dass Sie auch eine Warteschlange anhalten können. So können Sie Ihre Aufgaben in eine separate Warteschlange stellen und sie dann bei Bedarf anhalten/neu starten. –

1

Scheint, was Sie wirklich brauchen, ist Task Queues, die Aufgaben entwickelt werden, um von der Hauptanforderung Thread verarbeitet werden.Sie arbeiten auf Hintergrund Instanzen, so dass ihnen die gleichen Einschränkungen wie Cron Ausführungen (10 min Limit, etc) zugewiesen werden.

Debugging ein PaaS ist immer chaotisch, Google integrierte die Stackdriver debugger, aber ich bin nicht wirklich klar, was Sie zu erreichen versuchen.