1

这个问题涉及通过 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 仍然无法访问远程数据。

非常感谢任何帮助

4

1 回答 1

0

我最终尝试等待一段时间,然后通过 sshfs 安装远程数据,并且它运行良好。

所以这是我遵循的要点:

  • 从 fstab 中删除了 sshfs 条目

  • 从 .profile 中删除了 sshfs 条目

  • 在 rc.local 中添加了 20 秒的延迟:

su pi -c 'sleep 20 && sshfs -o reconnect,ServerAliveCountMax=1,ServerAliveInterval=15 myUser@ftp.remote.server.com: /home/pi/projects/remoteData &'

我认为命令需要延迟的原因是因为在运行时或最初运行sshfs时可能未建立 Wifi 连接。等待 20 秒为建立此连接和安装操作提供了足够的时间。rc.localfstab

请注意,在我的情况下,我还必须添加-o reconnect,ServerAliveCountMax=1,ServerAliveInterval=15选项,以防止与远程服务器的连接在一段时间后丢失(reconnect仅如此处所述是不够的。这些选项的作用是每 15 秒 ping 一次远程服务器,并在 1 次 ping 尝试失败后尝试重新连接。

于 2020-12-15T05:54:19.513 回答