树莓派添加开机启动项服务

 node /home/pi/wsp/jsmpeg/stream-server.js kay 9092 9094 &
 因客户需求,需要开机就能在浏览器中看到实时视频,而自己设计观看实时视频的方案是:使用ffmpeg直接解码rtsp流,将解码结果通过http发送到nodejs服务器,nodejs服务器使用Websocket发送给客户端,客户端使用canvas实时绘制图像。
	   因此,在能观看实时视频之前需要添加ffmpeg视频解码和nodejs服务器的开机启动。最简单的做法应该是将命令直接放到/etc/rc.local文件 exit 0命令之前,或者将命令放到/etc/profile文件里面,当然,我也确实这样做过,结果发现放在/etc/profile里面时,如果有这个命令一直在运行的话,每次打开一个终端都会弹出运行这条命令,并且该命令会一直阻塞进程而导致后续命令不会得到执行,并且这条命令也有可能运行失败,放在/etc/rc.local中时,会发现nodejs可以运行,而ffmpeg不能运行,并且运行结果与预期的相差甚远。没办法,只能把开机启动项做成服务了,做成服务可以使结果在预料之中,差别不是很大。
	   做开机服务的基本步骤:
1)创建并编辑一个服务文件,命名为node_streamer,内容如下:
#! /bin/sh
#  /etc/init.d/node_streamer
# starts the node_streamer service
### BEGIN INIT INFO
# Provides:          node_streamer
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop node_streamer application server
### END INIT INFO

SERVICE_NAME=node_streamer
PID_PATH_NAME=/tmp/$SERVICE_NAME-pid
case $1 in
    start)
	echo "Starting $SERVICE_NAME ..."
	if [ ! -f $PID_PATH_NAME ]; then
	    node /home/pi/wsp/jsmpeg/stream-server.js kay 9092 9094 &
	    echo "$SERVICE_NAME started ..."
	else
	    echo "$SERVICE_NAME is already running ..."
	fi
	;;
    stop)
	if [ -f $PID_PATH_NAME ]; then
	    PID=$(cat $PID_PATH_NAME);
	    echo "$SERVICE_NAME stoping ..."
	    sudo kill $PID;
	    echo "$SERVICE_NAME stopped ..."
	    sudo rm $PID_PATH_NAME
	else
	    echo "$SERVICE_NAME is not running ..."
	fi
	;;
    restart)
	if [ -f $PID_PATH_NAME ]; then
	    PID=$(cat $PID_PATH_NAME);
	    echo "$SERVICE_NAME stopping ...";
	    sudo kill $PID;
	    echo "$SERVICE_NAME stopped ...";
	    sudo rm $PID_PATH_NAME
	    echo "$SERVICE_NAME starting ..."
	    node /home/pi/wsp/jsmpeg/stream-server.js kay 9092 9094 &
	    echo $! > $PID_PATH_NAME
	    echo "$SERVICE_NAME started ..."
	else
	    echo "$SERVICE_NAME is not running ..."
	fi
	;;
esac 
2)将node_streamer服务放到/etc/init.d下
3)若担心node_streamer有语法错误或者命令不能运行,可以使用命令 sudo cp node_streamer node_streamer.sh 将node_streamer的内容复制到node_streamer.sh文件下,
然后使用sudo service node_streamer.sh start来查看服务是否能启动。

4)若能可以,先删除刚刚创建的node_streamer.sh文件,运行命令
   sudo update-rc.d node_streamer defaults
5)开机后使用命令 sudo service node_streamer status查看node_streamer服务运行状态
6)若要删除服务,则可以先sudo service node_streamer stop,再 sudo update-rc.d -f node_streamer remove

7)若要再添加其它服务,则可以修改nodestreamer文件,重复执行上面的2-6步操作,将所有node_stteamer换成你所需要的服务名称,将
   node /home/pi/wsp/jsmpeg/stream-server.js kay 9092 9094



你可能感兴趣的:(树莓派添加开机启动项服务)