programing

배치 파일을 윈도우즈 서비스로 실행

copysource 2023. 6. 4. 17:56
반응형

배치 파일을 윈도우즈 서비스로 실행

하나의 애플리케이션을 실행하려면 배치 파일을 시작해야 합니다(Jetty 시작, 라이브 로그 표시 등).이 배치 파일이 실행 중인 경우에만 응용 프로그램이 작동합니다.따라서 Windows 서버에서 로그아웃하지 않고 이 배치 파일을 실행해야 합니다.

이 배치 파일을 서비스로 실행할 수 있습니까?저는 비슷한 질문에서 나온 제안 중 하나를 실험하고 있습니다.

NSSM은 관리자로서 명령 프롬프트/터미널을 실행하는 완전한 자유롭고 초간단합니다.

nssm install "YourCoolServiceNameLabel"

그러면 실행할 파일의 위치를 선택할 수 있는 대화 상자가 나타납니다.

제거하기 위해

nssm remove "YourCoolServiceNameLabel"

Windows cmd에는 sc create라는 기능이 내장되어 있습니다.nssm만큼 화려하지는 않지만 추가 소프트웨어를 다운로드할 필요는 없습니다.

sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]

메모

  • start=demand는 사용자가 직접 서비스를 시작해야 함을 의미합니다.옵션에는 부팅, 시스템, 자동, 필요, 사용 안 함, 지연된 자동이 포함됩니다.
  • 은 다이후는공필다니요합백이에 뒤에 합니다.=
  • 서비스를 시작할 때 서비스가 적시에 응답하지 않는 오류가 발생했지만 서비스가 .bat를 성공적으로 실행한 것이 분명했습니다.아직 이것을 파고들지 않았지만 이 스레드는 같은 일을 겪었고 서비스를 설치하기 위해 nssm을 사용하여 해결했습니다.

추가 소프트웨어가 필요하지 않습니다.태스크 스케줄러 -> 태스크 생성 -> 숨김을 사용합니다.숨김 확인란은 왼쪽 하단 모서리에 있습니다.로그인 시 트리거할 작업(또는 원하는 조건)을 설정하고 작업 탭에서 작업을 선택합니다.숨김으로 실행하면 작업이 서비스처럼 백그라운드에서 자동으로 실행됩니다.

또한 "사용자 로그인 여부"에 관계없이 프로그램을 실행하도록 설정해야 합니다. 그렇지 않으면 프로그램이 계속 포그라운드에서 실행됩니다.

Windows 2019 Server에서 다음 명령을 사용하여 Minecraft Java 서버를 실행할 수 있습니다.

sc create minecraft-server DisplayName= "minecraft-server" binpath= "cisco.exe/CC:\Users\Administrator\Desktop\rungui1151.lnk" 유형= 자체 시작= 자동

.lnk 파일은 배치 파일에 대한 표준 창 바로 가기입니다.

.bat 파일 시작 ---

java -Xmx40960M -Xms40960M -d64 -jarincraft_server.1.15.1.jar

.bat 파일 끝 ---

이 모든 이유:

서비스가 폴더에서 시작하는 방법을 알지 못합니다.

cmd.exe가 폴더에서 시작하는 방법을 알지 못합니다.

서비스를 시작하면 "적절한 방식" 오류가 발생하지만 로그 파일은 서버가 실행 중임을 나타냅니다.

서버를 종료해야 하는 경우 작업 관리자로 이동하여 백그라운드 프로세스에서 서버 Java를 찾아 종료하거나 /stop 명령을 사용하여 게임에서 서버를 종료하거나 다른 프로그램/서버의 경우 서버와 관련된 방법을 사용합니다.

Doug Currie의 말처럼 RunAsService를 사용합니다.

나의 과거 경험으로 볼 때, 당신은 당신이 생성하는 서비스가 다음과 같은 것임을 기억해야 합니다.

  • 환경 변수의 집합이 완전히 다릅니다.
  • 권리/권한 문제에 대해 주의 깊게 검사해야 합니다.
  • 입력을 요청하는 대화 상자가 열리면 혼란을 일으킬 수 있습니다.

마지막 것이 아직 적용될지는 확실치 않습니다...그것은 제가 얼마 전에 작업했던 프로젝트에서 하나의 큰 악몽이었습니다.

무료는 아니지만(그러나 39달러), 파이어데몬은 저에게 너무 잘 작동했습니다. 저는 그것을 추천해야 합니다.배치 파일을 실행하지만 스케줄링, 서비스업 모니터링, GUI 또는 XML 기반 서비스 설치, 종속성, 환경 변수 및 로그 관리와 같은 매우 유용한 추가 기능이 많이 있습니다.

저는 처음에 FireDaemon을 사용하여 JBoss 애플리케이션 서버(run.bat)를 시작했지만, 얼마 지나지 않아 FireDaemon 구성 기능의 풍부함으로 배치 파일을 버리고 FireDaemon 서비스 정의에서 명령의 의도를 다시 만들 수 있다는 것을 깨달았습니다.

또한 이 서비스(또는 기술적으로 모든 서비스)를 관리할 많은 수의 윈도우즈 서버가 있는 경우 살펴볼 수 있는 Trinity라는 SUPER FireDaemon도 있습니다.

NSSM은 더 이상 유지 관리되지 않으므로 WinSW 사용을 고려할 수 있습니다.에서 작동하거나 작동하지 않는 이진 파일이 있습니다.그물.

기본적으로 XML 파일을 생성한 다음 설치합니다.다음은 최소 XML의 샘플입니다.

<service>

  <!-- ID of the service. It should be unique across the Windows system-->
  <id>myapp</id>

  <!-- Path to the executable, which should be started -->
  <!-- CAUTION: Don't put arguments here. Use <arguments> instead. -->
  <executable>%BASE%\myExecutable.exe</executable>

</service>

그런 다음 설치하고 시작할 수 있습니다.

winsw install myapp.xml
winsw start myapp.xml

NSSM을 설치하고 .bat 파일을 윈도우즈 서비스로 실행합니다.예상대로 작동합니다.

가장 쉬운 방법은 sc:에서 오픈소스 svbatch(https://github.com/mturk/svcbatch/) 를 CMD(BAT)의 래퍼로 사용하는 것입니다.

sc create myservice binPath= ""%cd%\tftcbatch.exe" myservice.bat"

언급URL : https://stackoverflow.com/questions/415409/run-batch-file-as-a-windows-service

반응형