Skip to content

Commit cad5b8c

Browse files
committed
RPi init script to run NodeJsController at boot time
execute the following to install: chmod 755 *.sh sudo cp NodeJsControllerInitScript.sh /etc/init.d/mysensors sudo update-rc.d mysensors defaults sudo mkdir -p /usr/local/var/run sudo chmod -R 777 /usr/local/var/run
1 parent d63f2a6 commit cad5b8c

File tree

2 files changed

+168
-0
lines changed

2 files changed

+168
-0
lines changed

NodeJsController.sh

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/sh
2+
# pidfile must be first argument
3+
PIDFILE=$1
4+
mkdir -p /home/pi/logs
5+
cd /home/pi/Arduino/NodeJsController
6+
/opt/node/bin/node NodeJsController.js >>/home/pi/logs/NodeJsController.log 2>&1 </dev/null &
7+
CHILD="$!"
8+
echo $CHILD > $PIDFILE

NodeJsControllerInitScript.sh

+160
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
#! /bin/sh
2+
### BEGIN INIT INFO
3+
# Provides: mysensors
4+
# Required-Start: $remote_fs $syslog $mongodb
5+
# Required-Stop: $remote_fs $syslog
6+
# Default-Start: 2 3 4 5
7+
# Default-Stop: 0 1 6
8+
# Short-Description: MySensors NodeJs Controller
9+
# Description: MySensors NodeJs Controller
10+
### END INIT INFO
11+
12+
# Author: Foo Bar <[email protected]>
13+
#
14+
# Please remove the "Author" lines above and replace them
15+
# with your own name if you copy and modify this script.
16+
17+
# Do NOT "set -e"
18+
19+
# PATH should only include /usr/* if it runs after the mountnfs.sh script
20+
PATH=/sbin:/usr/sbin:/bin:/usr/bin
21+
DESC="MySensors NodeJs Controller"
22+
NAME="NodeJsController.sh"
23+
PIDFILE="/usr/local/var/run/$NAME.pid"
24+
DAEMON="/home/pi/Arduino/NodeJsController/$NAME"
25+
DAEMON_ARGS="$PIDFILE"
26+
DAEMON_USER="pi"
27+
SCRIPTNAME=/etc/init.d/$NAME
28+
29+
# Exit if the package is not installed
30+
[ -x "$DAEMON" ] || exit 0
31+
32+
# Read configuration variable file if it is present
33+
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
34+
35+
# Load the VERBOSE setting and other rcS variables
36+
. /lib/init/vars.sh
37+
38+
# Define LSB log_* functions.
39+
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
40+
# and status_of_proc is working.
41+
. /lib/lsb/init-functions
42+
43+
#
44+
# Function that starts the daemon/service
45+
#
46+
do_start()
47+
{
48+
# Return
49+
# 0 if daemon has been started
50+
# 1 if daemon was already running
51+
# 2 if daemon could not be started
52+
start-stop-daemon --start --quiet --chuid $DAEMON_USER --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
53+
|| return 1
54+
start-stop-daemon --start --quiet --chuid $DAEMON_USER --pidfile $PIDFILE --exec $DAEMON -- \
55+
$DAEMON_ARGS \
56+
|| return 2
57+
# Add code here, if necessary, that waits for the process to be ready
58+
# to handle requests from services started subsequently which depend
59+
# on this one. As a last resort, sleep for some time.
60+
}
61+
62+
#
63+
# Function that stops the daemon/service
64+
#
65+
do_stop()
66+
{
67+
# Return
68+
# 0 if daemon has been stopped
69+
# 1 if daemon was already stopped
70+
# 2 if daemon could not be stopped
71+
# other if a failure occurred
72+
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
73+
RETVAL="$?"
74+
[ "$RETVAL" = 2 ] && return 2
75+
# Wait for children to finish too if this is a daemon that forks
76+
# and if the daemon is only ever run from this initscript.
77+
# If the above conditions are not satisfied then add some other code
78+
# that waits for the process to drop all resources that could be
79+
# needed by services started subsequently. A last resort is to
80+
# sleep for some time.
81+
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
82+
[ "$?" = 2 ] && return 2
83+
# Many daemons don't delete their pidfiles when they exit.
84+
rm -f $PIDFILE
85+
return "$RETVAL"
86+
}
87+
88+
#
89+
# Function that sends a SIGHUP to the daemon/service
90+
#
91+
do_reload() {
92+
#
93+
# If the daemon can reload its configuration without
94+
# restarting (for example, when it is sent a SIGHUP),
95+
# then implement that here.
96+
#
97+
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
98+
return 0
99+
}
100+
101+
case "$1" in
102+
start)
103+
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
104+
do_start
105+
case "$?" in
106+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
107+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
108+
esac
109+
;;
110+
stop)
111+
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
112+
do_stop
113+
case "$?" in
114+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
115+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
116+
esac
117+
;;
118+
status)
119+
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
120+
;;
121+
#reload|force-reload)
122+
#
123+
# If do_reload() is not implemented then leave this commented out
124+
# and leave 'force-reload' as an alias for 'restart'.
125+
#
126+
#log_daemon_msg "Reloading $DESC" "$NAME"
127+
#do_reload
128+
#log_end_msg $?
129+
#;;
130+
restart|force-reload)
131+
#
132+
# If the "reload" option is implemented then remove the
133+
# 'force-reload' alias
134+
#
135+
log_daemon_msg "Restarting $DESC" "$NAME"
136+
do_stop
137+
case "$?" in
138+
0|1)
139+
do_start
140+
case "$?" in
141+
0) log_end_msg 0 ;;
142+
1) log_end_msg 1 ;; # Old process is still running
143+
*) log_end_msg 1 ;; # Failed to start
144+
esac
145+
;;
146+
*)
147+
# Failed to stop
148+
log_end_msg 1
149+
;;
150+
esac
151+
;;
152+
*)
153+
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
154+
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
155+
exit 3
156+
;;
157+
esac
158+
159+
:
160+

0 commit comments

Comments
 (0)