2013-05-12 6 views
11

Ganz einfach, ich versuche zu automatisieren, ein Nodejs-Skript mit Cron ausführen, aber das Skript selbst scheint nicht in der Lage, die Datei auszuführen. Mein Skript ist einfach:Laufender Knoten aus einem Bash-Skript

#!/usr/bin/env node 
node /var/node/assets/js/update.js 

Dies ist jedoch in ausgeführt wird, gibt es, dass der Beginn der Wegfindung nicht korrekt ist:

/home/dev/update.sh:2 
node /var/node/assets/js/update.js 
     ^^^ 
SyntaxError: Unexpected token var 
    at Module._compile (module.js:439:25) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:901:3 

Gibt es etwas wirklich falsch mit der bash, oder tut Knoten haben eine spezifische Art und Weise dies zu tun? Ich habe/bin/env verwendet, um unabhängig von der Version die richtige Form von "node" zu haben.

Antwort

29

Es sieht so aus, als ob Sie versuchen, den Knoten innerhalb des Knotens auszuführen. Die Fehlermeldung kam von Knoten und es sieht so aus, als ob der Knoten den Befehl /var/node/assets/js/update.js ausführen wollte.

Ich würde die shebang Zeile bash eher als Knoten angeben.

Die obere Zeile

#!/usr/bin/env node 

bedeutet, dass JavaScript-Code, was sollte folgt, nicht bash.

+0

Flüche! War gerade dabei dasselbe zu tippen. Eine andere Möglichkeit ist, das Javascript direkt in diese Datei einzufügen. – Pickels

+0

Hm, in diesem Sinne, würde es nicht bedeuten, dass, wenn ich nur den Pfad zur Verfügung stellen würde, würde es funktionieren? Denn wenn ich nur den Pfad verlasse, irrt es mit: http://pastie.org/paste/7899197/text – Rogue

+0

tut mir leid. Ich folge nicht. Ich sehe den Fehler, aber was genau tust du, um den Fehler zu verursachen? –

9

Sie führen Knoten bereits in der ersten Zeile in einer nicht geänderten Umgebung aus.

Dann geben Sie in der zweiten Zeile den Befehl node /var/node/assets/js/update.js an diesen Knotenprozess.

Wie wäre es damit:

#!/usr/bin/bash 
node /var/node/assets/js/update.js 
+0

Nein, das scheint beim Laufen anzuhalten (unabhängig davon, welches Skript ich ausführe) – Rogue

+0

Wie unterscheidet sich diese Antwort von dem, was @Ray sagt? Was war Ihre Lösung am Ende? – stackunderflow

+0

Ich habe es etwas aufgegeben, die Variable env node zu verwenden, und habe stattdessen mein Skript mit bash gemacht. Ich habe nur Rays angekreuzt, da seine Antwort zuerst war :) – Rogue

0

Wie wäre das?

#!/bin/bash 

node /var/node/assets/js/update.js