无法使用init.d startscript执行jar

jul*_*ien 4 java jar gradle spring-boot ubuntu-14.04

我遵循了这个教程:

作为init.d服务

可执行jar具有通常的启动,停止,重启和状态命令.它还将在通常的/ var/run目录中设置一个PID文件,并默认登录到通常的/ var/log目录.

你只需将你的jar符号链接到/etc/init.d就像这样

假设您在/ var/myapp中安装了Spring Boot应用程序,要将Spring Boot应用程序安装为init.d服务,只需创建一个符号链接:

$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
Run Code Online (Sandbox Code Playgroud)

然后启动服务:

/etc/init.d/myapp start
Run Code Online (Sandbox Code Playgroud)

当我这样做时,就像在那里描述的那样,我在Ubuntu 14.04控制台中遇到以下错误:

ubuntu@spring:/var/myapp$ /etc/init.d/myapp start
-bash: /etc/init.d/myapp: cannot execute binary file: Exec format error
Run Code Online (Sandbox Code Playgroud)

Sta*_*lav 6

你不能以这种方式运行jar,因为它只是一个二进制文件.你必须使用已安装的java运行它(正如在MrPsion的回答中提到的那样)

java -jar /var/myapp/myapp.jar
Run Code Online (Sandbox Code Playgroud)

但是你不能为这样的命令创建符号链接.您可以使用上面的命令创建一个bash脚本,使其可执行并为此脚本创建一个符号链接.

或者,在Ubuntu中,您可以使用binfmt-support.只需先安装它

sudo apt-get install binfmt-support
Run Code Online (Sandbox Code Playgroud)

然后让你的jar可执行

chmod a+x myapp.jar
Run Code Online (Sandbox Code Playgroud)

然后你可以运行它(并用于符号链接),如下所示:

/var/myapp/myapp.jar
Run Code Online (Sandbox Code Playgroud)

更新:

由于您有一个Spring Boot应用程序,请检查您的jar是否在executable属性设置为true的情况下构建

springBoot {
    executable = true
}
Run Code Online (Sandbox Code Playgroud)

这应该让你以你想要的方式运行你的jar,whitout使它成为可执行文件或需要任何额外的库.

另外,根据评论,您正在使用的插件版本尚不支持此功能.您必须更新插件版本才能获得可执行jar.根据插件源和提交历史,您需要至少1.3版本


小智 6

答案不正确,您确实可以使用 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>
Run Code Online (Sandbox Code Playgroud)

详细说明在这里:https : //springjavatricks.blogspot.com/2017/11/installing-spring-boot-services-in.html