#!/bin/bash
if [ `whoami` != "nobody" ]; then
su nobody -c "$0 $1 $2"
exit
fi
APP_DIR="/usr/local"
NODE_APP="$APP_DIR/node/cluster.js"
CONFIG_FILE="$APP_DIR/Config/node.json"
PID_FILE="/tmp/node.pid"
NODE_EXEC=$(which node)
NODE_USER="nobody"
USAGE="Usage: $0 {start|stop|restart|status}"
DNAME="node"
is_node_listening() {
[[ -f "$PID_FILE" ]] || return 1;
local pid=$(cat "$PID_FILE")
lsof -i | grep -q $pid
}
wait_for_node_to_start_listening() {
for i in 0 1 2 3 4 5; do
if ! is_node_listening; then
sleep $i
else
echo "Running"
return 0
fi
done
echo "Failed starting Node app - node process is not listening on any ports, check logs"
exit 1
}
start_node() {
start-stop-daemon --start --background --exec $NODE_EXEC 1>>/var/log/radi.log 2>>/var/log/radi.log --user $NODE_USER --name $DNAME --pidfile $PID_FILE --make-pidfile --startas $NODE_EXEC --chuid $NODE_USER -- $NODE_APP $CONFIG_FILE
wait_for_node_to_start_listening
}
stop_node() {
start-stop-daemon --stop --user $NODE_USER --name $DNAME --pidfile $PID_FILE --retry 5 && echo "Stopped"
}
case "$1" in
start)
start_node
;;
stop)
stop_node
;;
restart)
stop_node && \
start_node
;;
*)
echo $USAGE
exit 1
;;
esac