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?
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
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.
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
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.
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.
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
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