这个问题涉及通过 Wifi 连接到互联网的树莓派 4,并运行 SpringBoot 应用程序,该应用程序根据用户请求生成具有特殊值的文件树。SpringBoot App 需要计算位于远程服务器上的一些文件的父路径来构建用户请求的文件树。
当从控制台启动 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
以便所有用户都可以读写(不仅是 root),以及要使用的 ssh 密钥的路径。
但是 SpringBoot 应用程序确实启动了,但是它无法访问远程数据,因此无法构建文件树。如果我通过 VNC(GUI 登录)登录,那么我可以单击实际安装的安装点,并且 SpringBoot 应用程序可以计算文件树,因为它可以访问远程数据。
但是当我关闭 VNC(即使没有与登录用户断开连接)时,SpringBoot App 无法再访问远程数据。
在控制台中运行sudo mount -av
(或-fav
模拟挂载)导致远程数据的挂载以及 SpingBoot 能够按预期访问远程数据。但是注销后无法访问远程数据。
请注意,我测试了使用和不使用 fstab 命令,_netdev
但它没有改变 SpringBoot 应用程序访问远程数据的能力。
我还跑去ps -A
检查哪个用户正在运行 SpringBoot,它显示pi
.
因此,我想知道为什么 SpringBoot 应用程序只能在连接 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 仍然无法访问远程数据。
非常感谢任何帮助