Ich muss einen Webdienst erstellen, der stündlich ausgeführt wird. Es wird verwendet, um Daten in einer Datenbank zu überprüfen und einer Tabelle in derselben Datenbank Warnungen hinzuzufügen, wenn bestimmte Bedingungen erfüllt / nicht erfüllt sind. Was wir derzeit haben, ist:
Wir haben Endgeräte, die Python verwenden, um an einen virtuellen Server von Amazon Web Services (AWS) zu berichten. Der AWS-Server nimmt diese Informationen und speichert sie in einer MySQL-Datenbank. Der AWS-Server ist Linux mit Django und Apache. Ich muss in der Lage sein, jede Stunde Python-Code auszuführen, der die von den Endgeräten gespeicherten Daten überprüft. Wenn bestimmte Bedingungen nicht erfüllt sind, wird der alerts
Tabelle in der Datenbank ein Datensatz hinzugefügt .
Wir haben ursprünglich einen Vertrag über die Erstellung des oben genannten Setups abgeschlossen. Ich bin neu in Python, Django und Apache. Ich habe jedoch bereits einige Änderungen am Python-Code vorgenommen, der die Daten von den Endgeräten sendet und auch empfängt. Ich bin ein Programmierer, der in die Webprogrammierung einbricht.
Hat jemand Empfehlungen, wie ich das machen kann?
quelle
Antworten:
Wie wäre es mit einem Cronjob , vorausgesetzt, Sie haben Shell-Zugriff?
Der cron- Daemon ist auf praktisch jedem UNIX-ähnlichen System vorhanden und plant die Ausführung von Befehlen basierend auf einer Beschreibung in einer Datei namens crontab .
Jede Zeile der Datei enthält eine Reihe von Feldern, die die Zeitpunkte angeben, zu denen ein Befehl ausgeführt werden soll.
Ihre Aufgabe kann entweder ein eigenständiges Programm sein, das die von Ihnen gewünschte Aufgabe ausführt, oder, wie eine andere Antwort andeutet, ein Aufruf eines HTTP-Clients wie wget , curl oder fetch, um auf eine Webressource zuzugreifen, die die Aktion ausführt.
Wenn Sie Beschränkungen für die Dauer der Anforderung einer Anforderung haben, müssen Sie die Aufgabe möglicherweise in ein Offline-Skript oder -Programm verschieben, das nicht in Ihrem Webframework / Server ausgeführt wird.
quelle
Mit Django auf AWS würde ich mich mit Sellerie befassen .
Sellerie fügt asynchrone Aufgaben hinzu und enthält einen Planer. In AWS können Sie Sellerie so konfigurieren, dass der Amazon Simple Queue Service als Broker verwendet wird (siehe Sellerie mit Amazon SQS zum Stapelüberlauf und diesen Blog-Beitrag zu diesem Thema).
Sie richten einen regelmäßigen Zeitplan für Sellerie-Aufgaben ein und es wird eine konfigurierte Aufgabe gemäß diesem Zeitplan ausgeführt.
Der Vorteil ist, dass Sie das gesamte Setup verwenden können, um jede asynchrone Aufgabe auszuführen und schwere Aufgaben von Ihrem Webserver an die Sellerie-Mitarbeiter zu verlagern.
Die leichte Alternative besteht darin, einfach einen Crontab-Job einzurichten. Sie können sogar eine Route in Ihrer Django-Anwendung konfigurieren, die mit
curl
oder aufgerufen werden sollwget
:quelle
cron
Aufgabe und spezifisch für die Implementierung des OP.Da auf Ihrer AWS-Instanz Linux ausgeführt wird, können Sie dies wahrscheinlich als
cron
Job ausführen .Sie könnten den Cron-Ansatz von Drupal verwenden , bei dem im Fall von Django ein Controller erstellt wird, der auf eine URL reagiert und dann die gewünschte Aktion ausführt.
Anschließend konfigurieren Sie eine Cron-Task für
curl
die URL des Controllers und lösen Ihr Skript aus.Dies hat den zusätzlichen Vorteil, dass es jederzeit einfach über eine URL aufgerufen werden kann: Möglicherweise möchte ein ungeduldiger Manager einen Bericht, der aus Daten der letzten 20 Minuten generiert wird.
quelle
Vielleicht möchten Sie sich APScheduler ansehen. Dies ist ein quarzartiger Scheduler (wenn auch nicht so umfangreich) für Python.
Dies kann eine weitaus bessere Alternative zu extern ausgeführten Cron-Skripten für Anwendungen mit langer Laufzeit (z. B. Webanwendungen) sein, da es plattformneutral ist und direkt auf die Variablen und Funktionen Ihrer Anwendung zugreifen kann.
Eine Beschreibung der neuesten Version finden Sie hier: http://pypi.python.org/pypi/APScheduler/2.0.3
Hier finden Sie einige Dokumentationen zur Installation / Implementierung: https://apscheduler.readthedocs.org/en/latest/
Hier sind einige der Funktionen:
quelle
Ich denke, Sie können einige Sachen wie ein verwenden
django-extensions
Django-Extensions Website
Es gibt ein Modul - Jobs. Für mich ist dies ein sehr gutes Werkzeug, um Ihre Cronjobs zu kontrollieren.
Die zweite Option ist die Verwendung eines Fabric und die Erstellung einer Funktion dafür.
Und ich sehe den dritten Weg. Verwenden Sie Ihre Fantasie und Ihr Wissen und erstellen Sie mit subprocess und sh eine eigene Funktion.
quelle
Die wahrscheinlichste Antwort hier ist, dass Sie crontab mit der Standardeinstellung ausführen, was bedeutet, dass die crontab SPOOL RATHER THAN THE FILES angezeigt wird.
In der Zwischenzeit kann es auch in AWS ausgeführt werden, da cron vorinstalliert und konfiguriert ist. Dies ermöglicht die Einrichtung einer Aufgabe, die stündlich, täglich, wöchentlich oder monatlich sowie in jedem anderen Zeitraum ausgeführt werden soll, indem Dateien eingefügt werden ein
/etc/cron.xxxxxx
Verzeichnis wie hier erklärt .Das Einrichten eines Jobs für stündliche, tägliche, wöchentliche oder monatliche Ausführung ist sehr schnell. Da die Frage lautet, wie Code jede Stunde ausgeführt werden soll , können Sie in AWS Linux eine Datei in erstellen
/etc/cron.hourly
.Hier ist der Schritt, wenn Sie sich über den SSH-Client bei Ihrer Instanz anmelden.
Im obigen Beispiel wurde die Datei gespeichert und als "Anwendung" bezeichnet. Der Name spielt keine Rolle, solange er einzigartig ist. Dies ist der Protokollbericht, indem Sie Folgendes ausführen:
$ sudo vim /var/log/cron
Wie im Protokoll angezeigt, auf stündlicher Basis beginnen, um sie auszuführen Anacron dass führt periodische Befehlsplanung , die traditionell von getan wird cron , und dann alle anderen Dateien im Verzeichnis aufrufen und die Befehle in den einzelnen Dateien ausführen.
quelle