Node.jsアプリを実行しているRaspbianを実行しているRaspberryPiに取り組んでおり、Piの起動時に起動しようとしています。いくつか例を見つけましたが、うまくいかないようです。私の現在のコードは次のとおりです。
#! /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
これはetc/init.dフォルダーにあり、chmod +x /etc/init.d/MyApp
を実行しました。手動で実行できます。次に、Sudo update-rc.d MyApp defaults
を実行し、再起動すると、スクリプトが実行されません。私はいくつかの異なる例を見て、調整を行いましたが、それでも運がありません。
.10.24 のようなビルド済みのPiリリースを使用している場合は、PATHの問題が発生している可能性があります。
start
コマンドの一部としてノードバイナリへのフルパスを指定するか、/etc/init.d/MyApp
を実行する前にノードバイナリへのPATHが設定されていることを確認できます。私は同じ問題を抱えていて、両方を試しましたが成功しました。また、お持ちのstop
コマンドが機能していない可能性があります。
#! /bin/sh
# /etc/init.d/test
### BEGIN INIT INFO
# Provides: test
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting test.js"
# run application you want to start
#node /home/pi/test.js > /home/pi/test.log
/home/pi/downloads/node-v0.10.24-linux-arm-pi/bin/node /home/pi/test.js >> /home/pi/test.log
;;
stop)
echo "Stopping test.js"
# kill application you want to stop
killall -9 node
# Not a great approach for running
# multiple node instances
;;
*)
echo "Usage: /etc/init.d/test {start|stop}"
exit 1
;;
esac
exit 0
Sudo node
を実行する場合は、Defaults secure_path
を使用してSudo visudo
にPATHを追加できます。
また、クラッシュ後もプロセスを実行し続けるために、 forever のようなものを使用することをお勧めします。
最初にnode.jsがRaspberryPiのどこにインストールされているかを確認することで、この問題を解決しました。
which node
これは私に与えました:
/usr/local/bin/node
Crontab構成を開きます。
Sudo crontab -e
次に、私のcrontabで:
@reboot Sudo /usr/local/bin/node <complete path to your .js app> &
保存して再起動すると、問題が解決します。
Mohitは正しいですが、明確にするために、readlinkを使用して、後でcronジョブとして追加する必要があるNode.jsアプリのフルパスを見つけることができます。
readlink -f <<name of file >>
たとえば、readlink -f HAP-NodeJS/Core.js
は/home/pi/HAP-NodeJS/Core.js
になります
which node
を使用して、node.jsがインストールされているフルパスを見つけることもできます
次に、Sudo crontab -e
を使用して新しいcronジョブを作成し、最後に次のコードを追加します。
@reboot Sudo /usr/local/bin/node <<.js application path>> &
たとえば、私のコードは次のようになります。
@reboot Sudo /usr/local/bin/node /home/pi/HAP-NodeJS/Core.js &
再起動(または起動)すると、Node.jsが実行されます。これが物事をクリアすることを願っています。