无法使用init.d startscript执行jar

时间:2016-05-25 12:43:31

标签: java gradle jar spring-boot ubuntu-14.04

我遵循了这个教程:

  

作为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

3 个答案:

答案 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

“执行”jar

java -jar /var/myapp/myapp.jar

和init脚本通常不是可执行文件的链接。

本文将向您展示如何为Java应用程序创建init脚本。

Run a Java Application as a Service on Linux

答案 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