这个问题涉及通过Wifi连接到互联网的raspberry pi 4,并运行一个SpringBoot应用程序,该应用程序在用户请求时生成具有特殊值的文件树。SpringBoot应用程序需要计算位于远程服务器上的某些文件的父路径,以构建用户要求的文件树。
当从控制台启动SpringBoot应用程序时,所有这些都可以在远程数据挂载时工作。
由于我需要SpringBoot应用程序在启动时自动运行并启动,所以我更改了/etc/rc.local和/etc/fstab,如下所示:
在/etc/rc/local中我添加了su pi -c 'cd /home/pi/MyApp && ./LaunchApp.run &'
在/etc/fstab中,我添加了
myUser@ftp.remote.server.com: /home/pi/projects/remoteData fuse.sshfs port=22,user,identityfile=/home/pi/.ssh/id_rsa,noatime,allow_other请注意allow_other,以便所有用户都可以读写(不仅仅是根用户),以及要使用的ssh键的路径。
然而,SpringBoot应用程序确实启动了,但是它无法访问远程数据,因此文件树无法构建。如果我通过VNC (GUI登录)登录,那么我可以单击实际挂载的挂载点,SpringBoot应用程序可以计算文件树,因为它可以访问远程数据。
但是当我关闭VNC时(即使没有与登录用户断开连接),SpringBoot应用程序就不能再访问远程数据了。
在控制台中运行sudo mount -av (或模拟挂载的-fav )将导致远程数据的挂载和SpingBoot按预期访问远程数据的能力。但注销后,无法访问远程数据。
请注意,我使用和不使用_netdev测试了fstab命令,但是它没有改变SpringBoot应用程序访问远程数据的能力。
我还运行了ps -A来检查哪个用户正在运行SpringBoot,并显示了pi。
因此,我想知道为什么应用程序只能在pi用户连接时才能看到远程数据?
,而且我还能做些什么使SpringBoot应用程序可以使用挂载点,而不必手动挂载远程数据?
请注意:我还尝试从rc.local或~/.profile启动安装(在这两种情况下,从fstab__删除相应的行),方法是添加以下行:
rc.local
su pi -c 'sshfs myUser@ftp.remote.server.com: /home/pi/projects/remoteData &'或.profile
sshfs myUser@ftp.remote.server.com: /home/pi/projects/remoteData不过,除非我手动登录,否则SpringBoot无法访问远程数据。
任何帮助都很感激
发布于 2020-12-15 05:54:19
最后,我尝试在通过sshfs挂载远程数据之前等上一段时间,它运行得完美无缺。
下面是我所关注的几点:
中删除了sshfs条目。
中删除了sshfs条目。
中延迟20秒
su pi -c 'sleep 20 && sshfs -o reconnect,ServerAliveCountMax=1,ServerAliveInterval=15 myUser@ftp.remote.server.com: /home/pi/projects/remoteData &'
我认为sshfs命令需要延迟的原因是在rc.local或fstab最初运行时可能无法建立Wifi连接。等待20秒将为建立连接和安装操作提供足够的时间。
请注意,在我的情况下,我还必须添加-o reconnect,ServerAliveCountMax=1,ServerAliveInterval=15选项,以防止连接到远程服务器的连接在一段时间后丢失(仅reconnect是不够的,正如所描述的here)。这些选项是每15秒对远程服务器进行ping,在1次失败后尝试重新连接。
https://stackoverflow.com/questions/65296120
复制相似问题