4 Möglichkeiten, Node.js Code zu planen

July 06, 2020
Autor:in:

4 Möglichkeiten, Node.js Code zu planen


Hallo und Danke fürs Lesen! Dieser Blogpost ist eine Übersetzung von 4 ways to schedule Node.js code. Während wir unsere Übersetzungsprozesse verbessern, würden wir uns über Dein Feedback an help@twilio.com freuen, solltest Du etwas bemerken, was falsch übersetzt wurde. Wir bedanken uns für hilfreiche Beiträge mit Twilio Swag :)

Musstest du jemals geplante Aufgaben mit JavaScript ausführen? Ich versuche ständig, Wege zu finden, um sich wiederholende Aufgaben zu automatisieren, und die Kraft des Codes ist äußerst nützlich, um mich von der mentalen Belastung vieler dieser monotonen Aufgaben zu befreien. Außerdem müssen viele Anwendungen regelmäßig wichtige Aufgaben ausführen, z. B. Verwaltung, Systemwartung, tägliche Sicherungen oder sogar das Senden von E-Mails oder anderen Mitteilungen. Hier kommt cron ins Spiel!

Cron-Ausdrücke

Mit Cron werden zeitbasierte Jobs geplant, so dass sie zu einem bestimmten Datum oder einer bestimmten Uhrzeit automatisch ausgeführt werden können. Cron-Ausdrücke sind Zeichenfolgen, mit denen der Zeitplan definiert wird, nach dem eine Aufgabe ausgeführt werden soll. Hier ist ein Link, mit dem du deine eigenen Cron-Ausdrücke erstellen kannst. Angenommen, ich wollte ein Node.js-Skript planen, das jeden Morgen um 9 Uhr ausgeführt wird. Mein Cron-Ausdruck würde ungefähr so aussehen:

0 0 9 * * * [command]

Lass uns das einmal aufschlüsseln. Die ersten 5 Teile des Ausdrucks bestehen aus Zeichenfolgen, die Minute, Stunde, Datum, Monat und Wochentag entsprechen. Wenn du möchtest, dass dein Befehl jede x Zeiteinheit ausführt wird, platziere einfach * entsprechend. Der obige Cron-Ausdruck führt den Befehl also jeden Tag, jeden Monat und jeden Wochentag 0 Minuten nach der 9. Stunde aus.

Wenn wir unseren Befehl so planen möchten, dass er in Intervallen ausgeführt wird, können wir / verwenden. Wenn ich beispielsweise jeden zweiten Tag mittags einen Befehl ausführen möchte, lautet der Ausdruck:

0 0 12 1/2 * * [command]

Nachdem wir die Cron-Ausdrücke verstanden haben, schauen wir uns vier Möglichkeiten an, wie wir Cron verwenden können, um unsere täglichen Texte zum Laufen zu bringen.

Lokal mit Crontab

Unix-Systeme

Crontab ist ein Software-Dienstprogramm, das in Unix-Betriebssysteme (und Betriebssysteme der Familie) integriert ist. Eine Liste von Jobs lebt in einer Crontab-Datei. Wenn du ein Unix-ähnliches Betriebssystem (Linux, MacOS usw.) verwendest, kannst du deine Crontab-Datei bearbeiten, indem du diesen Befehl ausführst.

$ crontab -e

Jeder Eintrag in einer Crontab-Datei besteht aus sechs Feldern, die durch Leerzeichen getrennt sind. Die ersten fünf bilden einen Cron-Ausdruck und das sechste ist der auszuführende Befehl. Angenommen, wir möchten eine 'index.js'-Datei mit node ausführen. Normalerweise führen wir in unserer Befehlszeile den folgenden Befehl aus:

$ node index.js

Für unseren Cron-Eintrag müssen wir jedoch drei Dinge einschließen: unseren Cron-Ausdruck, den absoluten Pfad zum Knoten (normalerweise /usr/local/bin/node) und den absoluten Pfad zu unserer Datei index.js. Unser Cron-Eintrag wird ungefähr so aussehen.

0 0 9 * * * [path/to/node] [path/to/index.js]

Versuche, deinen eigenen Javascript-Code als Eintrag in deine Crontab-Datei einzufügen. Du kannst jederzeit überprüfen, welche Jobs derzeit geplant sind, indem du diesen Befehl ausführst:

$ crontab -l

Dies ist der schnellste Weg, um den Code von node.js zu planen, und wir behalten den Zugriff auf alle unsere lokalen Ressourcen bei, es gibt jedoch einige Einschränkungen. Erstens muss dein Computer jederzeit eingeschaltet sein, damit dein geplanter Code ausgeführt werden kann. Nicht jeder möchte, dass seine Maschine zu jeder Zeit eingeschaltet bleibt. Schauen wir uns also einige Möglichkeiten an, wie wir unseren Code im Internet ausführen können.

Windows

Wenn du unter Windows arbeitest, hast du zwei Möglichkeiten. Du kannst das Windows-Subsystem für Linux installieren und folgenden Befehl ausführen:

$bash

Auf diese Weise kannst du eine Linux-Umgebung ausführen und wie oben beschrieben auf den crontab-Scheduler zugreifen. Alternativ kannst du Windows Scheduled Tasks von Powershell oder Cmd ausführen. Um Scheduled Tasks verwenden zu können, musst du eine Batchdatei (.bat) schreiben, die den Knoten auslöst. Eine sehr einfache Datei könnte folgendermaßen aussehen:

Batch-Datei mit dem Befehl node index

Windows Scheduler verwendet keine Cron-Ausdrücke, aber du kannst Jobs so planen, dass sie mit einem festgelegten wiederkehrenden Muster ausgeführt werden. Um eine geplante Aufgabe zum Ausführen unserer Batchdatei zu erstellen, die unseren Node.js-Code auslöst, führe den folgenden Befehl aus:

schtasks /create /tn myTask /tr [path/to/.bat/file] /sc DAILY /st 09:00

Lass uns das einmal aufschlüsseln. Dieser Befehl erstellt eine neue Aufgabe mit:

  • /tn – Aufgabenname. Eine Aufgabe namens myTask (PS: Dies muss unter den Aufgaben eindeutig sein.)
  • /tr – Ausführen der Aufgabe Der absolute Pfad zur Skriptdatei
  • /sc – Zeitplantyp. Ich habe täglich gewählt, aber andere Optionen umfassen (MINUTE, STUNDE, WÖCHENTLICH und mehr…)
  • /st – Startzeit. Wann die erste Aufgabe ausgelöst werden soll. Nachfolgende Aufgaben werden im festgelegten Intervall ausgeführt

Es gibt viel mehr Optionen, um den Aufgabenplan noch komplexer zu gestalten. Die Microsoft-Dokumentation enthält eine umfassende Anleitung zur Verwendung von schtasks

Cloud-Server

Wenn wir möchten, dass unser Code im Internet ausgeführt wird, benötigen wir eine Art Infrastrukturdienst. Es gibt viele beliebte Dienste wie AWS EC2, die Google Compute Engine, DigitalOcean Droplets, Azure Virtual Machines und viele mehr. Ich werde nicht genauer auf die Unterschiede zwischen den Diensten eingehen. Nachdem du jedoch die Ersteinrichtung für jeden dieser Dienste durchlaufen hast, solltest du in der Lage sein, das Crontab-Tool genau wie lokal zu verwenden.

Cloud-Server sind großartig, da sie rund um die Uhr online sind, und ich bezweifle, dass das Internet bald zusammenbrechen wird (ich klopfe mal auf Holz ...). Das Einrichten und Warten eines Servers kann jedoch zeitaufwändig sein. Da unser Server darüber hinaus „immer eingeschaltet“ ist, zahlen wir technisch gesehen immer dafür, obwohl dies die kostenlosen Angebote der meisten Anbieter nicht überschreiten sollte.

Cloud-Funktionen

Die Wartung eines Servers ist ein erheblicher Aufwand und viel mehr Arbeit, als viele von uns gerne erledigen würden. Es gibt auch ein zusätzliches Problem, dass wir das ganze Jahr über für unseren Server bezahlen, selbst wenn wir in dieser Zeit keine Jobs ausführen. Einige Cloud-Dienste bieten Cloud-Funktionen, die nach einem festgelegten Zeitplan ausgelöst werden können.

Hier einige Beispiele:

Wenn du deinen Cloud-Host in dieser Liste nicht finden kannst, bedeutet dies nicht unbedingt, dass es keine Möglichkeit gibt, geplante Cron-Jobs zu konfigurieren. Überprüfe die Dokumentation, um weitere Informationen zu erhalten. Genau wie bei Cloud-Servern sind unsere Cron-Funktionen jederzeit verfügbar. Und noch besser: Wir zahlen nur für das, was wir verwenden.

Cloud-Trigger

Diese Option ist den Cloud-Funktionen, über die wir zuvor gesprochen haben, sehr ähnlich und hostet unseren JavaScript-Code in einigen Cloud-Funktionen. Einige Dienste lösen eine HTTP-Anforderung an eine bestimmte URL in einem Zeitplan aus und sind sehr nützlich, da sie es uns ermöglichen, eine Anbieterbindung zu umgehen. Dies ist meine Lieblingsoption, da viele der Cloud-Funktionsdienste, die ich mag, keine integrierte Cron-Funktionalität haben. Alles, was wir tun müssen, ist, unseren Code mit unserem bevorzugten Cloud-Funktionsdienst zu hosten. Ich persönlich mag Twilio Functions. Wir können dann unsere Cloud-Funktion nach einem Zeitplan auslösen und voila, wir haben geplant, dass Node.js Code läuft.

Hier sind einige meiner Favoriten:

Bei Cloud-Triggern spielt es keine Rolle, wo sich dein Code befindet, solange es möglich ist, ihn mit einer HTTP-Anforderung auszulösen. Dies ist besonders nützlich, wenn du unterschiedliche Funktionen über verschiedene Anbieter hinweg hast. Dies bedeutet jedoch auch, dass es einen neuen Ort zum Verwalten geplanter Jobs gibt und dass du dies ebenfalls im Auge behalten musst.

Zusammenfassung

Es gibt verschiedene Möglichkeiten, deinen Node.js-Code so zu planen, dass er in regelmäßigen Abständen ausgeführt wird. Jede der verschiedenen Methoden zum Einrichten deiner Cron-Jobs hat unterschiedliche Vor- und Nachteile, und Entwickler haben je nach ihren Anforderungen unterschiedliche Vorlieben. Ich persönlich bevorzuge es, Twilio Functions mit Google Cloud Scheduler zu verwenden. In der Welt der serverlosen Umgebungen muss ich keinen Server mehr ausführen, um meinen Code zu planen. Genial!

Ich kann es kaum erwarten zu sehen, wie du deinen JavaScript-Code planst. Lass mich wissen, woran du arbeitest: