使用init.d运行SpringBoot Jar时出错
我有一个SpringBoot应用程序,为此我使用gradle :myapp:jar
来生成一个可执行的jar。另外,我还必须使用chmod 755 myapp.jar
来使jar可执行。使用init.d运行SpringBoot Jar时出错
这是用于产生罐,该as described here的gradle代码:
springBoot { 可执行=真 }
springBoot {
executable = true
}
jar {
baseName = 'myapp'
version = '0.1.0'
manifest {
attributes "Main-Class": "eu.myapp.Application"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
我然后创建符号链接,以便用它来的init.d,as described here启动/停止/状态。我执行创建符号链接的命令是这样的:
sudo ln -fs myjar.jar /etc/init.d/myjar
在此之后,我可以这样做:
sudo /etc/init.d/myapp start
的问题是,当我执行这个命令,我收到以下错误:
/etc/init.d/myapp: 1: /etc/init.d/myapp: PK: not found
/etc/init.d/myapp: 2: /etc/init.d/myapp�z�H: not found
/etc/init.d/myapp: 3: /etc/init.d/myapp: Syntax error: ")" unexpected
在网上查找,it appears to be related to a shebang issue,可以通过在文件的开头添加#!/bin/bash
来修复。但是,由于我运行的是由gradle
,生成的.jar
,我需要在哪里添加此行?或者,我该如何解决上述错误?
的jar
任务不会产生一个完全可执行适合通过init.d启动的jar。相反,您需要运行Spring Boot的Gradle插件提供的bootRepackage
任务,并且还需要将其配置为生成完全可执行的jar。为此,请将以下内容添加到您的build.gradle
中:
springBoot {
executable = true
}
sudo ln -fs myjar.jar /etc/init.d/myjar
我相信你需要使用的完整路径为源(即/your/full/path/to/myjar.jar)
我可以证实情况并非如此,相对路径正常工作。无论如何,谢谢你的时间。 –
bootRepackage命令伎俩,谢谢!事实上,可执行程序=真正的部分也是需要的;我已经有了,但忘了提及它(现在更新)。 –