web-dev-qa-db-de.com

Wie können Sie ein Node.js-Skript über einen Cron-Job ausführen?

Ich habe einfach ein Knotenskript, das ich einmal im Monat ausführen möchte.

30 6 1 * * node /home/steve/example/script.js

Dies funktioniert jedoch nicht, vermutlich aufgrund des Pfads oder der Shell, unter der der Befehl ausgeführt wird. Ich habe die folgenden Methoden zum Ausführen von Knoten über cron ausprobiert (getestet mit -v):

[email protected]:~$ node -v
v0.4.2

[email protected]:~$ sh node -v
sh: Can't open node

[email protected]:~$ bash node -v
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file

[email protected]:~$ /usr/local/bin/node -v
v0.4.2

[email protected]:~$ sh /usr/local/bin/node -v
/usr/local/bin/node: 1: Syntax error: "(" unexpected

[email protected]:~$ bash /usr/local/bin/node -v
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file

Ich habe keine Ideen mehr, um es auszuprobieren, einen Rat?

39
Steve

geben Sie einfach den vollständigen Pfad zum Knoten /usr/local/bin/node in Ihrem cron-Job an:

30 6 1 * * /usr/local/bin/node /home/steve/example/script.js
81
Dan D.

Fügen Sie einfach #!/usr/local/bin/node oben in das Skript ein, das Sie ausführen möchten. Dann wird es automatisch wissen, das Skript mit dem Knoten auszuführen. Stellen Sie sicher, dass die Datei auch ausführbar ist.

24
Mauvis Ledford

Ich weiß nicht, ob es eine gute Idee ist, die relativen Pfade in Ihrem Skript in absolute Pfade zu ändern
(Was passiert, wenn sich das Dateisystem ändert oder Sie in einer anderen Umgebung implementieren?)

Sie könnten versuchen, es in ein Shell-Skript zu packen, indem Sie einige Umgebungsvariablen in der Crontab-Ausführung festlegen. (speziell PATH & NODE_PATH für Starter)

Versuchen Sie meinen Vorschlag für diese ähnliche Frage:
https://stackoverflow.com/a/27823675/608269

4
Marc Smith

in meinem Laptop mit Linux Mint funktionierte der angegebene Pfad nicht, daher habe ich dies genutzt, um eine Problemumgehung zu erzielen.

$ which node

$ /usr/bin/node das hat für mich funktioniert.

2
zabusa

Diese Antworten hier, die besagen, dass die Verwendung des absoluten Pfads große Probleme beim Ausführen einer größeren Node-App verursacht!

echte Komplettlösung

Cron Jobs bearbeiten

crontab -e

Find Node Path

which node

CD in den Zielordner, dann Cron Job ändern gemäß Node Pfad und Skript ausführen

*/2 * * * * cd /home/destination/path && /bin/node index.js

Auf diese Weise können Sie eine vollständige NodeJS-Anwendung ausführen, ohne alle Fehler wie die Verwendung eines absoluten Pfads für Ihre index.js-Datei.

1
Curtis Xiao

Verwenden Sie absolute Pfade für den Knotenalias und die auszuführende Datei.

Cron-Jobs bearbeiten

crontab -e

Eintrag zum Ausführen unserer Knotendatei

Dies wird jede Minute ausgeführt.

*/1 * * * * * /bin/node /public/test.js

Vollständiges Tutorial https://askmacgyver.com/blog/tutorial/how-to-run-node-scripts-von-a-cron-job

0
Timothy Moody

Sie können auch Pfade zu Binärdateien über Ihrer Benutzer-Crontab wie folgt angeben:

PATH=/bin:/usr/bin:/usr/local/bin

* * * * * cd your/path && node foo.js
* * * * * cd your/path && npm run bar
0
imbolc