如何构建Springd jar文件,systemd可以直接将其作为服务执行?

如何构建一个Springd引导jar文件,systemd可以直接将其作为服务执行?

遵循 Installation作为systemd服务中

的示例,我创建了以下systemd服务,该服务 :

[Unit]

Description=CRS Self-certification Service

Documentation=

Requires=postgresql.service

After=postgresql.service

[Service]

Environment=LOADER_PATH='lib/,config/,/etc/opes/crs/selfcertification'

ExecStart=/opt/opes/crs/selfcertification/crs-selfcertification-1.0.0-SNAPSHOT.jar

Restart=always

RestartSec=10

User=crs

[Install]

WantedBy=multi-user.target

但是,启动此服务时,systemd抱怨jarfile不可执行:

Nov 29 10:57:59 ubuntu systemd[24109]: selfcertification.service: Failed at step EXEC spawning /opt/opes/crs/selfcertification/crs-selfcertification-1.0.0-SNAPSHOT.jar: Exec format error

Nov 29 10:57:59 ubuntu systemd[1]: selfcertification.service: Main process exited, code=exited, status=203/EXEC

Nov 29 10:57:59 ubuntu systemd[1]: selfcertification.service: Unit entered failed state.

Nov 29 10:57:59 ubuntu systemd[1]: selfcertification.service: Failed with result 'exit-code'.

jarfile的权限为755(所有人均可执行):

administrator@ubuntu:~$ ls -la /opt/opes/crs/selfcertification/crs-selfcertification-1.0.0-SNAPSHOT.jar

-rwxr-xr-x 1 crs selfcertification 35978778 Nov 22 17:16 /opt/opes/crs/selfcertification/crs-selfcertification-1.0.0-SNAPSHOT.jar

为了为systemd服务构建可执行的jarfile,必须对以下Gradle构建脚本进行哪些更改?

buildscript {

ext {

springBootVersion = '1.4.2.RELEASE'

}

repositories {

mavenCentral()

}

dependencies {

classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

}

}

apply plugin: 'java'

apply plugin: 'eclipse'

apply plugin: 'org.springframework.boot'

jar {

baseName = 'crs-selfcertification'

version = '1.0.0-SNAPSHOT'

}

sourceCompatibility = 1.8

targetCompatibility = 1.8

repositories {

mavenCentral()

}

springBoot {

mainClass = "com.opessoftware.crs.selfcertification.Application"

layout = "ZIP"

}

dependencies {

compile("org.springframework.boot:spring-boot-starter-web")

compile("org.springframework.boot:spring-boot-starter-thymeleaf")

compile("org.springframework.boot:spring-boot-starter-data-jpa")

compile("org.springframework.boot:spring-boot-starter-mail")

testCompile("org.springframework.boot:spring-boot-starter-test")

compile group: 'org.postgresql', name: 'postgresql', version: '9.4.1208.jre7'

compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.1.1'

compile group: 'junit', name: 'junit', version: '4.12'

}

请注意,如果不是直接尝试运行jarfile,而是systemd 该服务,则该服务将成功运行:

[Unit]

Description=CRS Self-certification Service

Documentation=

Requires=postgresql.service

After=postgresql.service

[Service]

Environment=LOADER_PATH='lib/,config/,/etc/opes/crs/selfcertification'

#ExecStart=/opt/opes/crs/selfcertification/crs-selfcertification-1.0.0-SNAPSHOT.jar

ExecStart=/opt/opes/crs/selfcertification/startCrsSelfCertification

Restart=always

RestartSec=10

User=crs

[Install]

WantedBy=multi-user.target

Shell脚本/opt/opes/crs/selfcertification/startCrsSelfCertification使用JVM调用jarfile:

#!/bin/sh

java -Dloader.path='lib/,config/,/etc/opes/crs/selfcertification' -jar /opt/opes/crs/selfcertification/crs-selfcertification-1.0.0-SNAPSHOT.jar

Spring Boot jarfile中可能缺少什么,阻止了systemd直接执行jarfile?

回答:

您应该指示Spring Boot将您的项目重新打包为 形式:

springBoot {

executable = true

}

并且此功能仅适用于Spring Boot 1.4.0+。

有关更多信息,请参阅http://docs.spring.io/spring-

boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html#build-

tool-plugins-gradle-repackage-configuration。

,使用:

  bootJar {

launchScript()

}

以上是 如何构建Springd jar文件,systemd可以直接将其作为服务执行? 的全部内容, 来源链接: utcz.com/qa/412635.html

回到顶部