首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SpringBoot应用程序不能访问远程文件(sshfs),除非用户连接到服务器?

为什么SpringBoot应用程序不能访问远程文件(sshfs),除非用户连接到服务器?
EN

Stack Overflow用户
提问于 2020-12-14 20:35:12
回答 1查看 127关注 0票数 1

这个问题涉及通过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中,我添加了

代码语言:javascript
复制
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

代码语言:javascript
复制
su pi -c 'sshfs myUser@ftp.remote.server.com:               /home/pi/projects/remoteData &'

.profile

代码语言:javascript
复制
sshfs myUser@ftp.remote.server.com:               /home/pi/projects/remoteData

不过,除非我手动登录,否则SpringBoot无法访问远程数据。

任何帮助都很感激

EN

回答 1

Stack Overflow用户

发布于 2020-12-15 05:54:19

最后,我尝试在通过sshfs挂载远程数据之前等上一段时间,它运行得完美无缺。

下面是我所关注的几点:

  • 从fstab

中删除了sshfs条目。

  • 从.profile

中删除了sshfs条目。

  • added在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命令需要延迟的原因是在rc.localfstab最初运行时可能无法建立Wifi连接。等待20秒将为建立连接和安装操作提供足够的时间。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65296120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档