Festlegen des Benutzers im Upstart-Skript für Node.JS und Forever

1049
sffc

Ich betreibe eine Website, die Node.JS auf Ubuntu Server (14.04 LTS) verwendet. Nach dem Neustart des Computers besteht mein aktueller Workflow darin, den Server manuell durch Ausführen des Befehls zu starten

$ forever start app.js 

Ich versuche jetzt, diesen Prozess mit Upstart zu automatisieren. Ich habe chkconfig bereits bei RHEL verwendet, aber ich bin neu bei Upstart. Ich habe das folgende Skript geschrieben und in /etc/init/myapp.conf gespeichert .

#!upstart  description "Start the node process with Upstart"   start on startup  stop on shutdown  expect fork   env APP_DIR="/path/to/app"  env NODE_BIN="/usr/local/bin"  env HOME_DIR="/home/admin"   script  date  echo "Starting"  su admin  cd $APP_DIR  PATH=$NODE_BIN:$PATH  HOME=$HOME_DIR  echo "Running forever start"  forever start app.js  end script   pre-stop script  date  echo "Stopping"  su admin  cd $APP_DIR  PATH=$NODE_BIN:$PATH  HOME=$HOME_DIR  echo "Running forever stop"  forever stop app.js  end script 

Das Skript scheint jedoch nicht zu funktionieren. Wenn ich sudo start myappoder laufe sudo stop myapp, hängt die Konsole einfach.

Ich möchte, dass Upstart so nah wie möglich an das emuliert, was passieren würde, wenn ich mich beim Neustart beim Computer anmeldete und ausführte forever start app.js, einschließlich des Benutzers, der den Prozess ausführt, den Speicherorten der Standardprotokolldatei usw.

Irgendwelche Ideen?

0

1 Antwort auf die Frage

2
antino

Mit können upstartSie die Verwendung foreverfür Ihre Knotenprozessverwaltung beenden . upstart verfügt über Mechanismen, um sicherzustellen, dass Ihr Prozess im Fehlerfall (oder nahezu jedes andere Ereignis in dieser Angelegenheit) gestartet / gestoppt / erneut gestartet wird.

Hier ist eine modifizierte Version Ihres Upstart-Skripts, die die respawnDirektive von Upstart verwendet, um den Neustart Ihres Prozesses bei einem Absturz auszuführen:

description "Start the node process with Upstart"  author "you"  # use if your process is going to fork *once* # expect fork  # use if your process is going to fork *twice* # exepect daemon  # respawn the process indefinitely # (ie. disregard the number of times it crashed # during a given interval and continuously  # restart the process) respawn respawn limit unlimited  setuid admin  # ensures the process is only started once we have # filesystem access and an ethernet interface other # than loopback is available (ie. internet conn) # if your node process doesn't require net connectivity # just remove the `and net-device-up...` start on (local-filesystem and net-device-up IFACE!=lo) stop on shutdown  # chdir sets the directory for all script blocks  # (pre/post/errethang) chdir "/path/to/your/app"  script # we're already in /path/to/your/app cause of `chdir`  echo "app is starting" /usr/local/bin/node app.js 2>&1 > app.log end script  pre-stop script echo "app is about to stop" end script 

Schließlich können Sie verwenden, um sicherzustellen, dass in Ihrem Dienstconf keine Syntaxfehler vorhanden sind init-checkconf /etc/init/myapp.conf.

meine hauptreferenz für upstart ist hier . Dieses Dokument ist jedoch etwas schwergewichtig. und es ist schwer, die Verwendung der realen Welt anhand einiger Beispiele zu erkennen.