在插入/移除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


转载于:https://my.oschina.net/osbin/blog/331896

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值