배치 파일을 Windows 서비스로 실행


159

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

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


27
배치 프로그래밍은 스택 교환에 대한 주제입니다.
Harry Johnston

12
좋은 질문. +1. 사회자들은 너무 화를 내고 ... 또 좋은 답변이 있지만 질문이 마감되었습니다 ((
gavenkoa

이 RunAsService 대신 runasservice.com을 사용 합니다. 사용하기가 훨씬 간단합니다. 말도 안되는 XML 구성이 없습니다. 기본적으로 이것은 명령 줄 인수를 서비스로 사용하여 콘솔 응용 프로그램을 래핑하는 RunAsService.exe 실행 파일을 제공합니다. 이것을 사용하여 Cygwin bash 스크립트를 서비스로 실행합니다 !!! 불행히도이 간단한 도구는 비공개 소스 인 것 같습니다.
Kaz

8
"프로그래머가 일반적으로 사용하는 소프트웨어 도구"에 기초하여 다시 열도록 지명. 이 질문에 대한 대답은 확실합니다. 또한 이것이 "서비스로 Windows 시작 배치 파일 시작"을 검색 할 때의 첫 번째 Google 결과라는 점을 명심하십시오. 따라서 일부 중재자가 '주제에 관한 것'이 좁은 범위 내에 있는지 여부는 다른 세계 사람들이 생각하는 것입니다. 나는 여기서 독단론에 대한 실용주의에 투표한다.
Adam Cameron

비슷한 질문은 serverfault serverfault.com/questions/54676/
Stephen Quan

답변:


151

NSSM 은 완전히 무료이며 매우 간단하며 관리자 권한으로 명령 프롬프트 / 터미널을 실행합니다.

nssm install "YourCoolServiceNameLabel"

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

제거

nssm remove "YourCoolServiceNameLabel"

25
+1 이것에 대해 들어 본 적이 없지만 매우 좋습니다. NSSM은 실제로 빨지 않습니다!
바이런 휘트 락

1
서비스를 설치하는 데 2 ​​분이 걸렸습니다
Ben Wilde

3
@ 주니어 M 감사합니다 !! 넌 나를 구했다. 나는 이것을 위해 4 시간을 보냈다. 감사!!
verystrongjoe

2
nssm팝업 데이터 입력을 피하기 위해 입력에 필요한 모든 인수 를 제공하는 방법이 있는지 알고 있습니까? 프로세스를 자동화하려고합니다.
수륙 양용 비행기

1
NSSM은 GDATA 안티 바이러스에 의해 일부 고객에게 계속 삭제됩니다. 예, 알고 있습니다. 화이트리스트를 작성하지만 고객은 자신에게 좋은 것을하지 않습니다. 슬픈 사실입니다.
Dreamspace President 2013 년

61

시작시 실행되도록 예약 된 작업으로 간단하게 설정하지 않는 이유는 무엇입니까?


1
Windows 2003 서버에서 실행되는 예약 된 작업 (제어판, 예약 된 작업으로 이동)을 통해 시작하는 robocopy를 통해 백업을 수행하는 많은 배치 파일이 있습니다. 치료를합니다 ...
SAL

백업 서비스를 모니터링하는 데 사용한 스크립트로이 작업을 수행했습니다. 그것은 매력처럼 작동합니다.
music2myear

1
이것이 최고의 솔루션입니다. 타사 소프트웨어가 필요하지 않으며 명령 줄 인터페이스가 없습니다. 또한 작업 스케줄러는 트리거, 조건 등에 대한 다양한 옵션을 제공합니다.
dev

3
이제 이것을 알아 냈습니다. 작업 시작시 ( "로그인 여부에 관계없이 실행"으로) % UserProfile %은 C : \ Users \ Default \입니다. ExpectedUser \ 다른 예약 된 작업에서 제대로 작동하는 것처럼 보이는 일부 .bat 파일에 대해 신비한 오류가 발생할 수 있습니다.
user1754036

2
예약 된 작업은 신뢰할 수없는 것으로 악명 높았습니다. 명백한 이유없이 제 시간에 시작되지 않은 작업으로 인해 발생한 모든 문제 때문에 실제로이 질문에 직면했습니다.

22

이를 위해 내장 된 Windows cmd가 있습니다 : sc create . nssm만큼 훌륭하지는 않지만 추가 소프트웨어를 다운로드 할 필요는 없습니다.

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

노트

  • start = demand는 서비스를 직접 시작해야 함을 의미합니다
  • 뒤에 공백이 필요합니다 =
  • 서비스가 적시에 응답하지 않는 서비스 시작 오류가 발생했지만 서비스가 .bat를 성공적으로 실행 한 것이 분명했습니다. 아직 이것을 파헤 치지 않았지만이 스레드 는 동일한 것을 경험하고 서비스를 설치하기 위해 nssm을 사용하여 해결했습니다.

4
Windows가 .bat 파일을 서비스로 실행하지 않는 것 같습니다.
퍼킨스

@Perkins-Mine은 어제 몇 대의 컴퓨터에서 작업했습니다. 특정한 것을 경험하고 있습니까? 서비스가 시작될 때 적시에 응답하지 않았다는 오류가 발생했지만 .bat 파일은 Kibana node.js 서버를 시작하는 것이며 오류가 있어도 성공적으로 실행되었습니다. 이 스레드의 사람들은 같은 것을 경험하는 것처럼 보였지만 nssm에는 없었습니다. stackoverflow.com/a/40130630/885535
w00ngy

2
내 경우에는 배치 파일로 만들 파일이 만들어지지 않고 프로그램이 실행되고 있지 않으므로 시작하지 않는다고 가정해야합니다. 대신 cmd.exe / C <batchfile>을 실행하는 서비스를 만들어서 문제를 해결했습니다. Windows 10을 사용하고 있으므로 새로운 "보안"항목 일 수 있습니다.
퍼킨스

@Perkins 방금 win10 1803에서 문제가 발생했습니다. node.js 서버를 시작하십시오. bat 파일은 cmd 또는 powershell에서 호출 될 때 파일을 작성하고 서비스를 실행합니까? 서비스를 시작할 때 메시지 상자가 있습니까? 서비스에 해당 디렉토리에 대한 권한이 있습니까? 로컬 로그 파일에 기록하여 박쥐에 오류 로깅을 추가 할 수 있습니다. 작동하는지 확인하십시오.
w00ngy

1
" 오류 1053 : 서비스가 적시에 시작 또는 제어 요청에 응답하지 않았습니다. "
Alex Klaus

5

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

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


3

Doug Currie는 RunAsService를 사용한다고 말합니다.

나의 과거 경험에서 당신은 당신이 생성 한 서비스가

  • 완전히 다른 환경 변수 세트가 있습니다
  • 권리 / 권한 문제에 대해주의 깊게 검사해야합니다
  • 어떤 종류의 입력을 요구하는 대화 상자가 열리면 혼란을 일으킬 수 있습니다

마지막 것이 여전히 적용되는지 확실하지 않습니다 ... 그것은 얼마 전에 내가 일한 프로젝트에서 큰 밤의 악몽이었습니다.


3

무료는 아니지만 (39 달러) FireDaemon 은 저에게 매우 효과적이었습니다. 배치 파일을 실행하지만 예약, 서비스 모니터링, GUI 또는 XML 기반 서비스 설치, 종속성, 환경 변수 및 로그 관리와 같은 추가되고 매우 유용한 기능이 많이 있습니다.

FireDaemon을 사용하여 JBoss 응용 프로그램 서버 ( run.bat ) 를 시작 했지만 FireDaemon 구성 기능이 풍부하여 배치 파일을 버리고 FireDaemon 서비스 정의에서 해당 명령의 의도를 재현 할 수 있음을 알게되었습니다.

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


2

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

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

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

--- .bat 파일이 시작됩니다 ---

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

--- .bat 파일이 종료됩니다 ---

이 모든 이유는 다음과 같습니다.

서비스가 폴더에서 시작하는 방법을 모릅니다.

cmd.exe가 폴더에서 시작하는 방법을 모른다

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

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


이것은 질문에 대한 답변을 제공하지 않습니다. 평판 이 충분 하면 모든 게시물댓글 수 있습니다 . 대신 asker의 설명이 필요없는 답변을 제공하십시오 . - 검토에서
Jeremy J Starcher

1
올바르게 읽으면 예제와 관련된 완벽한 답변이 포함되어 있음을 알 수 있습니다.
Goofyseeker311

0

AlwaysUp 은 배치 파일을 서비스로 쉽게 실행합니다. FireDaemon (위에서 언급 한)과 유사하며 무료는 아니지만 풍부한 기능 세트가 전문적인 환경의 자산이 될 수 있습니다.

행운을 빕니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.