So starten Sie eine Node.js app auf system-boot?
Arbeite ich an einem Raspberry Pi läuft Raspbian läuft ein Node.js app und zu versuchen, es zu starten, wenn der Pi hochfährt. Ich fand ein paar Beispiele, aber ich kann nicht scheinen, um es funktioniert. Mein aktuelle code:
#! /bin/sh
# /etc/init.d/MyApp
### BEGIN INIT INFO
# Provides: MyApp.js
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts MyApp.js
# Description: Start / stop MyApp.js at boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting MyApp.js"
# run application you want to start
node /home/pi/app/MyApp/MyApp.js
;;
stop)
echo "Stopping MyApp.js"
# kill application you want to stop
killall MyApp.js
;;
*)
echo "Usage: /etc/init.d/MyApp {start|stop}"
exit 1
;;
esac
exit 0
Habe ich diese in der etc/init.d Ordner, lief chmod +x /etc/init.d/MyApp
ich bin in der Lage, es manuell ausführen, dann Lauf ich sudo update-rc.d MyApp defaults
starten und das Skript läuft nicht. Ich habe mir einige andere Beispiele, Anpassungen und immer noch kein Glück.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine vorgefertigte Pi wie 0.10.24, möglicherweise ein PFAD Problem.
Können Sie entweder den vollständigen Pfad zu dem Knoten binären als Teil des
start
Befehl oder stellen Sie sicher der PFAD zu dem Knoten Binärdateien festgelegt werden, bevor/etc/init.d/MyApp
ran. Ich hatte das gleiche Problem und habe versucht, sowohl mit Erfolg. Auch diestop
Befehl, wie Sie es möglicherweise nicht funktioniert.Wenn Sie möchten, um zu tun
sudo node
können Sie fügen Sie den PFAD zuDefaults secure_path
mitsudo visudo
.Außerdem würde ich empfehlen, mit so etwas wie für immer zu halten, Ihr Prozess läuft nach dem Absturz, und was nicht.
chmod +x /etc/init.d/MyApp
und entfernt und dann wieder Hinzugefügt rc.d.... Mein plan ist es, sich zu bewegen, um mit immer nachdem ich es bekommen kann, um trigger auf das boot.sudo /etc/init.d/MyApp start
.> test.log
und überprüfung der log? Ich war nicht in der Lage, ein log von dem Problem ab in irgendeine Datei/var/log
, aber vielleicht habe ich es verpasst. Ich bin mir nicht sicher, obProvides: MyApp.js
könnte das Problem sein, aber möchten Sie vielleicht, um zu versuchenProvides: MyApp
statt.Provides: MyApp.js
undProvides: MyApp
. Keine änderung im Verhalten.#!/bin/bash NODE=/opt/node/bin/node SERVER_JS_FILE=/home/pi/app/server.js USER=pi OUT=/home/pi/nodejs.log case "$1" in start) echo "starting node: $NODE $SERVER_JS_FILE" sudo -u $USER $NODE $SERVER_JS_FILE > $OUT 2>$OUT & ;; stop) killall $NODE ;; *) echo "usage: $0 (start|stop)" esac exit 0
Es gibt mir das gleiche Ergebnis. Wird ausgeführt manuell, aber nicht automatisch. Es wird mit einem einfachen web-server, liefert "Hallo Welt", aber nicht meine volle app../app/MyApp/config.json
denn es würde nicht ausgeführt, wenn der Aufruf manuell zu beginnen. Ich endete mit den vollständigen Pfad verwenden, um es zu bekommen, um die Ausführung von Stand/home/pi/app/MyApp/config.json
.Ich löste dieses problem, indem Sie zuerst überprüfen, wo node.js installiert wurde auf RaspberryPi:
Dieser gab mir :
Open-config-crontab:
Dann in meine crontab :
Speichern, Neustart, und das problem ist gelöst !
>> &
tun? Es wirft einen Fehler für mich.Mohit ist richtig, aber nur zur Klarstellung, die Sie verwenden können, readlink finden Sie den vollständigen Pfad für Ihre Node.js app, wie es sein wird später benötigt, um hinzuzufügen, wie Sie einen cron-job.
Beispielsweise
readlink -f HAP-NodeJS/Core.js
Ergebnisse in/home/pi/HAP-NodeJS/Core.js
Können Sie auch
which node
zu finden, die den vollständigen Pfad, wo node.js installiert istAls Nächstes erstellen Sie einen neuen cron-job mit
sudo crontab -e
und fügen Sie den folgenden code am Ende:zum Beispiel, mein code sieht wie folgt aus.
Beim Neustart (oder Inbetriebnahme) , Ihre Node.js ausführen sollte. Hoffe, das klärt die Dinge.