Spring boot Spring Boot可执行文件JAR无法作为systemd服务打开特权端口

Spring boot Spring Boot可执行文件JAR无法作为systemd服务打开特权端口,spring-boot,Spring Boot,我希望将我的Spring Boot应用程序作为systemd服务运行,直接监听端口443(而不是在nginx/httpd后面)。为此,我在systemd服务单元中指定AmbientCapabilities=CAP\u NET\u BIND\u SERVICE,如下所示: [Service] User=myapp ExecStart=/usr/lib/myapp.jar SucessExitStatus=143 AmbientCapabilities=CAP_NET_BIND_SERVICE 但

我希望将我的Spring Boot应用程序作为systemd服务运行,直接监听端口443(而不是在nginx/httpd后面)。为此,我在systemd服务单元中指定
AmbientCapabilities=CAP\u NET\u BIND\u SERVICE
,如下所示:

[Service]
User=myapp
ExecStart=/usr/lib/myapp.jar
SucessExitStatus=143
AmbientCapabilities=CAP_NET_BIND_SERVICE
但是,当嵌入式启动脚本运行Java时,该功能似乎丢失了。作为测试,我替换了我自己的一行bash脚本java-jar/usr/lib/myapp.jar,以查看在运行任何bash脚本时是否丢失了该功能,但这是有效的。据我所知,嵌入式启动脚本中的某些东西导致了问题

话虽如此,我很可能会放弃嵌入式启动脚本,转而直接从systemd服务单元启动Java,但如果(1)其他人有相同的问题,或者(2)这是一个实际的错误,而不仅仅是我遗漏了一些东西,我至少想问这个问题


干杯

抱歉,如果我的猜测很愚蠢,但这就是我看到的:环境功能应该设置为正在运行的二进制文件(我已经找到了)。如果我理解正确,本例中的二进制文件是/usr/bin/java或安装java时。所以你应该试试。但是您将其设置为
myapp.jar
一般来说,是的,但是在systemd服务单元的情况下,功能会传递给子(和孙子)进程。举个例子,当我用自己的bash脚本替换运行java的脚本时,它起了作用。请尝试执行ExecStart=java-jar/usr/lib/myapp.jar(与手动操作完全相同)。现在您有了ExecStart=/usr/lib/myapp.jar,这是另一回事了。@Bartoszbiliki很抱歉没有明确说明这一点,当然这是可行的。正如我所说的,我可能会使用这种方法。我被扔了出去,因为他们说要使用嵌入式启动脚本。