[i=s] 本帖最后由 小康911 于 2025-4-4 19:23 编辑 [/i]<br />
<br />
<p>首先声明,我是飞牛新手哈,各位大佬莫要笑话。<br />
先说背景:<br />
我有个硬件数字播放器(以下简称数播),支持NAS播放,但只支持NFS协议;<br />
我的存储路径是“存储空间2/xk”,这个是我的整个共享文件夹,已经在网页端开的SMB和WebDav;<br />
因为这个xk文件夹很乱,里面东西很多,所以不能直接开给数播用,不然会扫到上万个音视频文件;<br />
所以在“xk”文件夹下建立了子目录“MultiMedia”,准备把这个文件夹开放给数播。<br />
悲催的发现,飞牛居然不支持共享子目录。<br />
我知道最简单的方法就是在存储空间2下建立和xk同级的文件夹给nfs,但这怎能是我这个强迫症的风格?<br />
于是首先想到软链接,果断以root登陆飞牛SSH,用ln命令在/vol2/1000下建立指向/vol2/1000/xk/MultiMedia的符号。<br />
结果虽然在网页端文件管理中能看到刚创建的符号链接,但在共享页面的文件夹选择里还是看不到。<br />
既然这个办法行不通,那就试试手动修改NFS协议的配置文件/etc/exports。<br />
把末尾路径修改成/vol2/1000/xk/MultiMedia,重启NFS服务之后,数播访问正常。<br />
正当我窃喜时,忽然发现重启飞牛之后,数播又提示无媒体,于是看了下上面的配置,居然又被改回去了。<br />
这应该是飞牛启动的时候有进程检查了,于是干脆把飞牛映射的/fs开头的路径用ln再次指向我的文件夹,测试,依然失效。<br />
本着“世上无难事,只要肯放弃”的原则,决定放弃网页端,自己手动搭服务。<br />
于是在网页端关闭NFS协议,自己手动在/etc/exports末尾添加配置:<br />
/vol2/1000/xk/MultiMedia 192.168.1.0/24(ro,async,no_subtree_check)<br />
然后先exportfs -a,再systemctl start nfs-server,结果成功。<br />
没错,不出意外还是出意外了,重启依然失效,发现飞牛只要检测到了服务是开启的,就会按照网页端的配置强制把配置写回去。<br />
于是一咬牙,决定写个脚本,启动之后直接写配置。<br />
先在/home下写了个nfs.sh脚本,内容如下:<br />
!/bin/bash</p>
<p>TL="/vol2/1000/xk/MultiMedia 192.168.1.0/24(ro,async,no_subtree_check)"</p>
<p>if ! grep -Fxq "$TL" /etc/exports; then<br />
echo "配置不存在,正在添加..."<br />
echo "$TL" | sudo tee -a /etc/exports > /dev/null<br />
sudo exportfs -a<br />
sudo systemctl restart nfs-server<br />
echo "操作完成"<br />
else<br />
echo "配置已存在,无需操作"<br />
fi</p>
<p>先增加x权限,在终端运行测试一下没问题。<br />
再把上面脚本全路径写入/etc/rc.local中,最后systemctl enable rc-local。<br />
想着这回行了,重启飞牛测试,发现依然是被改回去的结局。<br />
开始我寻思脚本没执行,于是给脚本增加日志,重启测试发现脚本是执行的,只不过脚本执行五秒钟之后,飞牛依然强制改回,好吧还是老问题。<br />
这说明飞牛的服务要晚于rc-local启动,于是在/etc/rc.local中执行脚本的前面一行加了sleep 30。<br />
然后重启测试,悲催的发现问题依旧,配置文件还是比我的脚本晚五秒钟被改回。<br />
现在的我有点疯狂了,正在我想要不要用crontab设置个定时任务让脚本一分钟执行一次时,忽然灵光一现,想起了sleep是阻塞执行的。<br />
也就是说,不管sleep多长时间,在sleep的过程中所有任务都会等候,所以我这个sleep等于没用,飞牛的服务还是在rc-local之后才执行。<br />
于是想着能不能把sleep放到后台去等候,不阻塞前台,让启动任务该怎么执行还怎么执行,于是改/etc/rc.local如下:<br />
修改前:<br />
!/bin/sh -e</p>
<p>sleep 30<br />
/home/nfs.sh</p>
<p>exit 0<br />
修改后:<br />
!/bin/sh -e</p>
<p>(sleep 30 && /home/nfs.sh) &</p>
<p>exit 0<br />
怀着忐忑的心情重启测试,一切正常。<br />
悲催的折腾了半个多小时,终于问题解决。<br />
在此强烈呼吁飞牛赶紧支持共享子文件夹吧,简直太痛苦了!</p> |