在插入/移除usb摄像头时自动启动/停止mjpg-streamer服务更智能些

      OpenWrt的mjpg-streamer软件包安装后会在/etc/hotplug.d/usb/下生成”20-mjpg-streamer“shell脚本文件(对应在OpenWrt源码位置:feeds/packages/multimedia/mjpg-streamer/files/mjpg-streamer.hotplug)。此文件源码如下:

case "$ACTION" in
	add)
		# start process
		/etc/init.d/mjpg-streamer start
		;;
	remove)
		# stop process
		/etc/init.d/mjpg-streamer stop
		;;
esac

      其功能是在插入usb设备时,会执行此脚本add分支下的代码,这里即执行/etc/init.d/mjpg-streamer start。当usb设备移除时会执行此脚本的remove分支代码,这里即执行/etc/init.d/mjpg-streamer stop。如果路由只有一个usb口并且没有外接usb hub时,此脚本可以工作的很好(唯一问题是不管插入何种usb设备都会运行此脚本的add分支,移除时会执行此脚本的remove分支)。但是在多usb口或者外接了usb hub后,如果挂载的usb摄像头mjpg-streamer服务已经良好的运行,此时再移除usb hub下的其他usb设备会导致mjpg-streamer服务被停止,不够智能,我们需要让它更智能些。

      解决办法是add和remove分支都加入判断条件。mjpg-streamer服务需要运行的条件是”/dev/video*“文件存在并且存在”/usr/bin/mjpg_streamer“可执行文件且”mjpg-streamer“服务还未运行。mjpg-streamer服务需要停止的条件是”/dev/video*“文件不存在并且”mjpg-streamer“服务还在运行。综上所述,修改此脚本代码如下:

case "$ACTION" in
	add)
		if [ -c /dev/video[0-9] ] &&
			!(pgrep -f mjpg_streamer >/dev/null 2>&1) &&
			[ -x "/usr/bin/mjpg_streamer" ]; then
			/etc/init.d/mjpg-streamer start
		fi
		;;
	remove)
		if [ ! -c /dev/video[0-9] ] &&
			(pgrep -f mjpg_streamer >/dev/null 2>&1); then
			/etc/init.d/mjpg-streamer stop
		fi
		;;
esac


你可能感兴趣的:(在插入/移除usb摄像头时自动启动/停止mjpg-streamer服务更智能些)