XP와 Vista에서 서비스로 설치 해야하는 Java 응용 프로그램을 방금 상속 받았습니다. Windows를 어떤 형태로든 사용하고 약 8 년이 지났으며 Java 앱과는 별도로 서비스를 만들 필요가 없었습니다 (앱에 대한 항아리와 단일 종속성 항아리가 있습니다-log4j ). 이것을 서비스로 실행하는 데 필요한 마술은 무엇입니까? 소스를 얻었으므로 코드 수정은 바람직하지만 피할 수는 있습니다.
XP와 Vista에서 서비스로 설치 해야하는 Java 응용 프로그램을 방금 상속 받았습니다. Windows를 어떤 형태로든 사용하고 약 8 년이 지났으며 Java 앱과는 별도로 서비스를 만들 필요가 없었습니다 (앱에 대한 항아리와 단일 종속성 항아리가 있습니다-log4j ). 이것을 서비스로 실행하는 데 필요한 마술은 무엇입니까? 소스를 얻었으므로 코드 수정은 바람직하지만 피할 수는 있습니다.
답변:
Java Service Wrapper 와 함께 운이 좋았습니다.
Apache Commons 데몬 이 좋은 대안입니다. 그것은했다 Procrun 윈도우 서비스 및 Jsvc 유닉스 데몬. 덜 제한적인 Apache 라이센스를 사용하며 Apache Tomcat은 Windows 및 Linux에서 실행하기 위해 자체 라이센스의 일부로 사용합니다! 작동시키는 것은 약간 까다 롭지 만 실제 예제 가있는 철저한 기사 가 있습니다.
그 외에도 Apache Tomcat 의 bin \ service.bat에서 서비스 설정 방법을 알 수 있습니다. Tomcat에서 Procrun 바이너리 이름을 변경합니다 (prunsrv.exe-> tomcat6.exe, prunmgr.exe-> tomcat6w.exe).
Procrun을 사용하는 데 어려움을 겪고있는 시작 및 중지 메소드는 매개 변수 (String [] argv)를 수락해야합니다. 예를 들어 "start (String [] argv)"및 "stop (String [] argv)"는 작동하지만 "start ()"및 "stop ()"은 오류를 발생시킵니다. 해당 호출을 수정할 수없는 경우 필요에 맞게 해당 호출을 마사지 할 수있는 부트 스트 래퍼 클래스를 만드는 것이 좋습니다.
--JvmOptions=-Dopt=a#-Dopt2=b
. 나는 개미 스크립트에서 명령을 실행하고 있었기 때문에 며칠 동안 어려움을 겪었습니다. 도움이 되길 바랍니다.
Apache Commons Daemon 을 사용하면 사용자 정의 실행 파일 이름과 아이콘을 가질 수 있습니다! 당신은 또한 당신의 자신의 이름과 아이콘으로 사용자 정의 Windows 트레이 모니터를 얻을 수 있습니다!
이제 내 이름과 아이콘 (prunsrv.exe)으로 서비스를 실행하고 시스템 트레이 모니터 (prunmgr.exe)에도 고유 한 사용자 지정 이름과 아이콘이 있습니다!
MyServiceName.exe
하고 MyServiceNamew.exe
각각.WinRun4J를 다운로드 하고 RCEDIT.exe
함께 제공된 프로그램을 사용하여 다음과 같이 사용자 정의 아이콘을 포함하도록 Apache 실행 파일을 수정하십시오.
> RCEDIT.exe /I MyServiceName.exe customIcon.ico
> RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico
이제 다음과 같이 Windows 서비스를 설치하십시오 ( 자세한 내용 및 옵션 은 설명서 를 참조하십시오).
> MyServiceName.exe //IS//MyServiceName \
--Install="C:\path-to\MyServiceName.exe" \
--Jvm=auto --Startup=auto --StartMode=jvm \
--Classpath="C:\path-to\MyJarWithClassWithMainMethod.jar" \
--StartClass=com.mydomain.MyClassWithMainMethod
이제 자신의 아이콘과 이름으로 실행되는 Jar의 Windows 서비스가 있습니다! 모니터 파일을 실행할 수도 있으며 시스템 트레이에서 고유 한 아이콘과 이름으로 실행됩니다.
간단한 방법은 NSSM Wrapper Wrapper입니다 ( 내 블로그 항목 참조 ).
또 다른 옵션은 WinRun4J 입니다. 이것은 Windows 서비스 호스트 (32 비트 및 64 비트 버전)로 두 배가되는 구성 가능한 Java 실행기입니다. 오픈 소스이며 사용에 제한이 없습니다.
(전체 공개 : 나는이 프로젝트에서 일합니다).
또 다른 대답은 Yet Another Java Service Wrapper입니다 . 이것은 더 나은 라이센스가 있으므로 Java Service Wrapper의 좋은 대안처럼 보입니다. 또한 JSW에서 YAJSW로 쉽게 이동할 수 있도록 고안되었습니다. 확실히, Windows 서버에 익숙하지 않고 Java 앱을 서비스로 실행하려고 시도하는 것은 매우 사용하기 쉽습니다.
다른 사람들은 내가 찾았지만 다음을 사용하지 않았습니다.
Java Service Wrapper 가 잘 작동 한다고 생각합니다 . 애플리케이션을 통합 하는 세 가지 방법 이 있습니다. 코드 1을 변경하고 싶지 않다면 옵션 1이 가장 효과적이라고 들립니다. 구성 파일은 약간 미쳐 버릴 수 있지만 (옵션 1의 경우) 시작하고 인수를 지정할 프로그램은 도우미 프로그램이며 프로그램을 시작한다는 것을 기억하십시오. 여기에는 예제 구성 파일 이 있습니다.
Gradle Build Tool을 사용하는 경우 Apache Commons Daemon Procrun 사용을 용이하게하는 windows-service-plugin을 사용해 볼 수 있습니다 .
플러그인을 사용하여 Java Windows 서비스 애플리케이션을 작성하려면 몇 가지 간단한 단계를 수행해야합니다.
적절한 메소드를 사용하여 기본 서비스 클래스를 작성하십시오.
public class MyService {
public static void main(String[] args) {
String command = "start";
if (args.length > 0) {
command = args[0];
}
if ("start".equals(command)) {
// process service start function
} else {
// process service stop function
}
}
}
플러그인을 build.gradle
파일에 포함 하십시오.
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.alexeylisyutenko:windows-service-plugin:1.1.0"
}
}
apply plugin: "com.github.alexeylisyutenko.windows-service-plugin"
Gradle 2.1에 도입 된 새로운 인큐베이팅 플러그인 메커니즘을위한 동일한 스크립트 스 니펫 :
plugins {
id "com.github.alexeylisyutenko.windows-service-plugin" version "1.1.0"
}
플러그인을 구성하십시오.
windowsService {
architecture = 'amd64'
displayName = 'TestService'
description = 'Service generated with using gradle plugin'
startClass = 'MyService'
startMethod = 'main'
startParams = 'start'
stopClass = 'MyService'
stopMethod = 'main'
stopParams = 'stop'
startup = 'auto'
}
createWindowsService gradle 태스크를 실행 하여 Windows 서비스 분배를 작성하십시오.
이것이 간단한 Windows 서비스를 만들기 위해해야 할 전부입니다. 플러그인은 Apache Commons Daemon Procrun 바이너리를 자동으로 다운로드하고이 바이너리를 서비스 배포 디렉토리로 추출한 다음 서비스 설치 / 제거를위한 배치 파일을 만듭니다.
${project.buildDir}/windows-service
디렉토리 에는 서비스 실행 파일, 서비스 설치 / 제거를위한 배치 스크립트 및 모든 런타임 라이브러리가 있습니다. 서비스 실행을 설치하려면 <project-name>-install.bat
이 서비스 실행을 제거 할 경우 <project-name>-uninstall.bat
. 서비스를 시작하고 중지하려면 <project-name>w.exe
실행 파일을 사용하십시오 .
메소드 처리 서비스 시작은 처리를 수행하기 위해 별도의 스레드를 작성하고 시작한 다음 리턴해야합니다. 기본 메소드는 서비스를 시작하고 중지 할 때 다른 스레드에서 호출됩니다.
자세한 정보는 플러그인 및 Apache Commons Daemon Procrun에 대해 읽으십시오.
JavaService 는 LGPL입니다. 매우 쉽고 안정적입니다. 추천.
Java 8을 사용하면 외부 도구없이이 시나리오를 처리 할 수 있습니다. java 8과 함께 제공되는 javapackager 도구는 자체 포함 된 애플리케이션 번들을 작성하는 옵션을 제공합니다.
-native type 가능한 경우 자체 포함 된 응용 프로그램 번들을 생성합니다. -B 옵션을 사용하여 사용중인 번 들러에 인수를 제공하십시오. type이 지정되면이 유형의 번들 만 작성됩니다. 유형을 지정하지 않으면 모두 사용됩니다.
다음 값은 유형에 유효합니다.
-native type
Generate self-contained application bundles (if possible). Use the -B option to provide arguments to the bundlers being used. If type is specified, then only a bundle of this type is created. If no type is specified, all is used.
The following values are valid for type:
all: Runs all of the installers for the platform on which it is running, and creates a disk image for the application. This value is used if type is not specified.
installer: Runs all of the installers for the platform on which it is running.
image: Creates a disk image for the application. On OS X, the image is the .app file. On Linux, the image is the directory that gets installed.
dmg: Generates a DMG file for OS X.
pkg: Generates a .pkg package for OS X.
mac.appStore: Generates a package for the Mac App Store.
rpm: Generates an RPM package for Linux.
deb: Generates a Debian package for Linux.
Windows가 다음 문서를 참조하는 경우 필요에 따라 msi 또는 exe를 만들 수 있습니다.
exe: Generates a Windows .exe package.
msi: Generates a Windows Installer package.
다른 솔루션에 대한 꽤 좋은 비교는 http://yajsw.sourceforge.net/#mozTocId284533 에서 제공됩니다.
개인적으로 launch4j와 같은
바로 가기를 넣어야하기 때문에 간단합니다.
Windows 7
C:\users\All Users\Start Menu\Programs\Startup
(관리자) 또는User home directory(%userProfile%)
Windows 10 :
실행 중 shell:startup
속성-> 단축키-> 대상-> java.exe -jar D:\..\runJar.jar
참고 : 로그인 한 후에 만 실행됩니다
관리자 권한으로
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"
Windows 서비스를 작성합니다
당신이 얻는 경우에 타임 아웃 을 사용 cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
하지만조차 당신은 시간 제한하지만 배경에 java.exe에서 시작됩니다 얻을 것이다. 작업 관리자 체크인
참고 : 이것은 Windows 로그온 시작시 실행됩니다 (로그인 전, 서비스 ' Startup Type
'기준)
Glassfish v3 용으로 작성되었지만 일반적으로 Java 프로그램과 잘 작동하는 " winsw "를 사용하십시오 .
.NET 런타임이 설치되어 있어야합니다.
항상 sc.exe 만 사용합니다 ( http://support.microsoft.com/kb/251192 참조 ). SP1의 XP에 설치해야하며 Vista 버전이 아닌 경우 Vista 리소스 키트를 사용하여 다운로드 할 수 있습니다.
Java로 너무 복잡한 일은 없었지만 완전한 명령 줄 인수 (x : \ java.exe ....)를 사용하거나 Ant를 사용하여 depencies를 포함하고 매개 변수를 설정하는 스크립트를 작성하면 나에게 잘 작동합니다.
또 다른 좋은 옵션은 FireDaemon 입니다. NASA, IBM 등과 같은 일부 대형 상점에서 사용합니다. 전체 목록은 웹 사이트를 참조하십시오.
현재 Eclipse 기반 응용 프로그램을 실행하려면 이것이 필요하지만 먼저 해당 응용 프로그램에 로컬 인 일부 변수를 설정해야합니다. sc.exe는 실행 파일 만 허용하고 스크립트는 허용하지 않으므로 Windows 2003 리소스 키트의 일부인 autoexnt.exe를 사용하도록 설정했습니다. . 서비스를 단일 배치 파일로 제한하지만 서비스로 변환하려면 배치 스크립트가 하나만 필요합니다.
챠오!