使用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 
} 
+0

bootRepackage命令伎俩,谢谢!事实上,可执行程序=真正的部分也是需要的;我已经有了,但忘了提及它(现在更新)。 –

sudo ln -fs myjar.jar /etc/init.d/myjar

我相信你需要使用的完整路径为源(即/your/full/path/to/myjar.jar)

+0

我可以证实情况并非如此,相对路径正常工作。无论如何,谢谢你的时间。 –