Dies ist auf Ubuntu 10.04 LTS
Ich habe also ein Gulp-Skript (das über Node ausgeführt wird), das hervorragend funktioniert, wenn ich es manuell ausführe. Es führt tatsächlich eine „Überwachung“ eines Verzeichnisses aus, sodass automatisch ein Befehl ausgeführt wird, wenn sich eine der Dateien ändert. Das anfängliche Problem, das ich hatte, war, dass die „Überwachung“ abstürzte, wenn ich eine Änderung speichere, die einen Fehler enthält.
Ich dachte, ich könnte das Problem beheben, indem ich das Gulp-Skript über Upstart ausführe und es neu starte, wenn es abstürzt. Aber wenn ich „start gulpwatch“ oder sogar „sudo start gulpwatch“ ausführe, heißt es, es startet und gibt mir eine PID, aber in Wirklichkeit startet es nur und stürzt ab und behält die „Überwachung“ nicht bei. Dies wird im Syslog bestätigt, wo ich die Zeilen sehe:
Mar 24 14:19:19 ubuntu init: gulpwatch main process (2653) terminated with status 2
2072 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2073 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2654) terminated with status 2
2074 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2075 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2655) terminated with status 2
2076 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2077 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2656) terminated with status 2
2078 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2079 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2657) terminated with status 2
2080 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2081 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2658) terminated with status 2
Hier ist meine Upstart-Datei
/etc/init/gulpwatch.conf
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 5 10
exec "cd /opt/lib/vendor/node/;/usr/bin/gulp --gulpfile gulpfile.js"
Wenn ich die beiden oben aufgeführten Befehle „cd /opt/lib/vendor/node/“ und „/usr/bin/gulp --gulpfile gulpfile.js“ ausführe, funktioniert es perfekt (aber natürlich wird es nicht erneut gestartet, wenn es aufgrund eines Syntaxfehlers in der Überwachungsdatei abstürzt).
Irgendeine Idee, warum mein Upstart-Skript nicht funktioniert?
Antwort1
Ich habe es herausgefunden. Ich musste chdir ausführen /opt/lib/vendor/node/
und dann diesen Teil aus der exec
Anweisung entfernen. Anscheinend exec
führt es keine alten Shell-Befehle aus, sondern nur Skripte (und Argumente).
Antwort2
Sie müssen versuchen, die Zeile auszuführen, bevor Sie sie über das Upstart-Skript ausführen. Ich meine diese Zeile:
cd /opt/lib/vendor/node/;/usr/bin/gulp --gulpfile gulpfile.js
Was haben Sie erhalten, als Sie es auf dem Server ausgeführt haben? Wenn Sie statt einer Erfolgsmeldung einen Fehler erhalten, beheben Sie das Problem zuerst.