我遵循了这个教程:
作为init.d服务
可执行jar具有通常的启动,停止,重启和状态 命令。它还将在通常的/ var / run中设置一个PID文件 目录并默认记录在通常的/ var / log目录中。
你只需将你的jar符号链接到/etc/init.d就像这样
假设您安装了Spring Boot应用程序 / var / myapp,将Spring Boot应用程序安装为init.d服务 只需创建一个符号链接:
$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
然后使用以下命令启动服务:
/etc/init.d/myapp start
当我这样做时,就像在那里描述的一样,我在Ubuntu 14.04控制台中出现以下错误:
ubuntu@spring:/var/myapp$ /etc/init.d/myapp start
-bash: /etc/init.d/myapp: cannot execute binary file: Exec format error
答案 0 :(得分:5)
你不能以这种方式运行jar,因为它只是一个二进制文件。你必须使用已安装的java运行它(正如在MrPsion的回答中提到的那样)
java -jar /var/myapp/myapp.jar
但是你不能为这样的命令创建符号链接。您可以使用上面的命令创建一个bash脚本,使其可执行并为此脚本创建一个符号链接。
或者,在Ubuntu中,您可以使用binfmt-support
。只需先安装
sudo apt-get install binfmt-support
然后让你的jar可执行
chmod a+x myapp.jar
然后你可以运行它(并用于符号链接),如下所示:
/var/myapp/myapp.jar
<强>更新强>
由于您有一个Spring Boot应用程序,请检查您的jar是否在executable
属性设置为true的情况下构建
springBoot {
executable = true
}
这应该让你以你想要的方式运行jar,whitout使它成为可执行文件或需要任何其他库。
根据评论,您正在使用的插件版本还不支持此功能。您必须更新插件版本才能获得可执行jar。根据插件来源和commit history你需要至少1.3版本
答案 1 :(得分:2)
您需要使用java
“执行”jarjava -jar /var/myapp/myapp.jar
和init脚本通常不是可执行文件的链接。
本文将向您展示如何为Java应用程序创建init脚本。
答案 2 :(得分:2)
答案是不正确的,您确实可以使用init.d将spring boot应用程序jar作为服务启动。正如Stanislav所指出的那样,甚至有一个春季教程解释如何做到这一点:https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
问题可能在您的maven文件中。我有同样的问题并解决了它将以下内容添加到我的maven文件中:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.7.RELEASE</version>
<configuration>
<executable>true</executable>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
此处有详细说明:https://springjavatricks.blogspot.com/2017/11/installing-spring-boot-services-in.html