HELP!init.d가있는 스프링 부트 실행 파일이 사용자 대신 루트로 실행
SpringBoot 1.3.6 및 Gradle과 함께 기본 제공 시작 스크립트를 사용하고 있습니다. 아, 그리고 distZip 작업은 물건을 압축합니다.
얼마 전에 한동안이 모든 것이 아주 잘 진행되었다. 그때 나는 그것을 망쳤다.
저는 나무 딸기 파이에 패키지 (기본적으로 Zip 압축이 풀림)를 설치하고 소유권과 사용 권한을 확인했습니다. 모든 것이 내가 (app "user"그룹 "pi"로) app을 실행하고자하는 사용자에 의해 소유되어 있으며 파일에 대한 권한이 있는지 확인합니다 (myapp/bin/myapp 스크립트의 경우 755, 거의 모든 것).
~ appservice/myapp/bin/myapp를 가리키는 /etc/init.d에 심볼릭 링크를 넣었고 시스템에 가져 오기 위해 update-rc.d myapp defaults를 실행했습니다. symlink 자체는 root/root가 소유하고 있습니다. 그러나 그것이 있어야한다고 생각합니다. 그렇지 않습니까?
두 가지 문제가 있습니다. 두 문제가 서로 연관되어 있다고 생각합니다.
우선, (init.d로 부팅하거나 "sudo service myapp start"로 수동으로) 스크립트를 시작한 경우에도 루트로 실행되는 것처럼 보입니다 (특히 앱이 액세스하는 데 사용하는 경로 파일은/home/appservice/myapp/files 대신/root/myapp/files로 나옵니다).
두 번째로 앱이 다운됩니다 ... 특히 syslog 메시지 "myapp.service start operation timed out. Terminating."이 표시됩니다. 앱을 정상적으로 종료 한 것처럼 보입니다. 아, 그리고 관련 ... 내가 "sudo service myapp start"로 시작하면 명령이 결코 반환되지 않습니다. 어떤 새로운 ...
셋째, 응용 프로그램 로그 출력은 /var/log/myapp.log가 아닌/var/log/syslog로 이동합니다. 이는 스프링 부트 설명서에서 말하는 것과 반대입니다.
나는 이것에 대한 배포판의 최종 회귀 테스트를하고 있으며 (최근의 유명한 단어들) 나는 최근에 아무 것도 변경하지 않았다 ... :) 아니, 실제로 배포와 관련된 가장 최근의 변경은 src/main/dist 디렉토리에 저장하고, 그 후 (올바른 사용자로 부팅 할 때) 실행 중이다.
실행 스크립트를 게시 하겠지만 springBoot {executable = true} 작업을 사용할 때 스프링 부트에서 제공하는 기본 스크립트입니다.
여기 내 전체 build.gradle 파일이 있습니다 ... 나는 어리 석음을 보지 못했지만 어쩌면 그렇게 할 것입니다.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'application'
apply from: 'gradle/gradle/helpers.gradle'
mainClassName = 'app.Application'
if (!hasProperty('mainClass')) {
ext.mainClass = 'app.Application'
}
springBoot {
executable = true
}
repositories {
mavenCentral()
}
sourceSets {
main {
java { srcDir 'src/main/java' }
resources { srcDir '/src/main/resources' }
}
test {
java { srcDir 'src/test/java' }
resources { srcDir 'src/test/resources' }
}
}
project.ext {
applicationVersion = "0.1.5-alpha"
applicationRelease = isApplicationRelease()
applicationDate = new Date()
applicationRevision = getRevision()
applicationVersionSnapshot = (!applicationRelease) ? "+SNAPSHOT.${asUTC(applicationDate, 'yyMMddHHmm')}.git${applicationRevision}" : ""
applicationVersionFull = "${applicationVersion}${applicationVersionSnapshot}"
}
jar {
baseName = 'myapp'
version = '0.9.0'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile group: 'com.sun.mail', name: 'javax.mail', version: '1.5.2'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.6'
compile group: 'commons-cli', name:'commons-cli', version: '1.3.1'
compile group: 'org.json', name:'json', version: '20140107'
compile "commons-codec:commons-codec:1.10"
compile("org.springframework.boot:spring-boot-starter-hateoas")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-mail")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework:spring-web")
compile("org.springframework:spring-messaging")
compile("joda-time:joda-time:2.2")
compile("com.fasterxml.jackson.core:jackson-databind")
compile("com.googlecode.json-simple:json-simple")
compile("org.jdom:jdom:2.0.0")
compile("org.hibernate:hibernate-validator")
compile("org.apache.tomcat.embed:tomcat-embed-el")
compile("org.apache.commons:commons-io:1.3.2")
compile("org.kamranzafar:jtar:2.3")
compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity4")
compile("com.jcraft:jsch:0.1.53")
compile("javax.jmdns:jmdns:3.4.1")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
task wrapper(type: Wrapper) {
gradleVersion = '2.14'
}
... 내가 우편 번호를 통해 파일을 scp, 그것은 사용자/그룹 appservice/appservice에서 끝납니다. 내가 IP를 그룹화하기 위해 파일을 chgrp하려고 할 때 사용자 appservice가 그룹 pi 및 그룹 appservice의 구성원인데도 "조작이 허용되지 않음"을 얻습니다. "info appservice"로 확인한 경우 –
당신이 기꺼이하고 유능한 경우 응용 프로그램을 관리하기 위해 systemd로 전환하려면이 대답을보십시오. http://stackoverflow.com/a/22121547/272180 – yglodt
예! 저것은 잘 작동 한 것처럼 보입니다, yglodt. 고맙습니다. –