닫을 때 자동으로 응용 프로그램을 다시 시작


10

컴퓨터가 실행될 때마다 실행하려는 서버 응용 프로그램이 있으며 대개 자체적으로 닫히는 것을 제외하고는 일반적으로이 경우입니다.

응용 프로그램을 모니터링하고 닫을 때 다시 시작하기 위해 실행할 수있는 박쥐 또는 스크립트가 있습니까?


어떤 유형의 응용 프로그램이며 일반적으로 어떻게 시작됩니까? 서비스로서, 실행 명령으로 레지스트리에서 또는 시작 폴더에서?
KCotreau

레지스트리 실행 명령 '-start'옵션을 사용하십시오.
Sid

앱이 이미 실행중인 상태에서 해당 명령을 다시 실행하면 현재 어떻게됩니까?
KCotreau

아무것도. 이 명령은 응용 프로그램이 이미 실행 중임을 인식합니다.
Sid

답변:


12

항상 작동하지는 않지만 (프로그램 종류에 따라 달라짐) 일반적으로 다음과 같은 배치 파일을 만들 수 있습니다.

@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

goto Start

메모장을 예로 사용했습니다.

echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

사용자가 프로세스를 다시 시작하기 전에 중단 할 수있는 시간을주는 지연 (10 초)입니다.

라인

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

필요하지는 않지만 프로그램이 파일에 닫힐 때마다 기록되므로 문제를 진단하는 것이 유용 할 수 있습니다. ErrorLevel은 많은 것을 말하지는 않지만 프로그램이 정상적으로 닫히면 0을 반환해야합니다. 그렇지 않으면 -zero 메시지

이미 실행중인 경우 프로그램이 아무것도하지 않는다는 것을 언급하십시오. 즉, 일반적으로 응용 프로그램이 시작되고 다른 복사본이 이미 실행 중임을 감지하고 즉시 종료됩니다. 이 경우이 배치 파일을 시작하기 전에 프로그램이 실행중인 경우 배치가 순환되어 10 초마다 프로그램을 시작하려고 시도합니다.


"그런 다음 일괄 처리가 반복되어 10 초마다 프로그램 시작을 시도합니다." 이것은 나쁜 것입니까?
posfan12

감사!! 오전 12시 52 분에 약간의 복사 및 붙여 넣기를하면 아침에 찾거나 찾을 수없는 것에 대해 걱정하지 않고 잠을 잘 수 있습니다. 어 수면 후 아침에.
Spike0xff

2

위의 답변을 바탕으로 해당 명령을 배치 파일에 넣은 다음 해당 배치 파일을 1 분마다 예약 된 작업으로 실행하도록 설정하는 것이 좋습니다. 이와 관련된 오버 헤드는 거의 없으며 프로세스가 중단되었다는 사실과 상관없이 프로세스를 명시합니다.


이것은 빠르지 만 다소 어색하고 비효율적 인 솔루션으로 생각납니다. 같은 목적에 더 적절한 방법이 있습니까? 당신의 도움을 주셔서 감사합니다!!!
Sid

Sid, 내가 말했듯이 오버 헤드는 매우 작으며 쉽게 할 수 있습니다. 실행 중인지 확인한 다음 다시 시작하기 위해 무언가를 코딩하는 방법을 알고 싶다면 자유롭게 느끼십시오.하지만 긍정적 인 결과로 오랫동안 이것을 해왔습니다. 일반적으로 서버에 응용 프로그램이있을 때 실행을 중지 할 때 사용되는 일반적인 방법입니다.
KCotreau

지금까지 가장 쉬운 방법입니다. 그리고 오버 헤드가 없습니다.
surfasb

2

나는 추측 바로 이 질문에 대한 대답에 따라 달라집니다 당신이 그것을 할 싶어. 실수로 시스템을 종료하려고합니까? 기계 사용자 (예 : 직원이 모니터링 소프트웨어를 닫음)에 의해 우연히 "악의적 인"종료를 방지합니까? 심각하고 숙련 된 악의적 인 공격을 방지 하시겠습니까? 맬웨어를 직접 작성하려고합니까 (이 경우 ;-)).

또한 다른 의견자가 언급했듯이 Windows 서비스를 작성한 경우 (예 :)

개인적으로, 나는 아마도 두 번째 응용 프로그램을 작성하고 같은 방식으로 시작하여 시작합니다. 이 응용 프로그램을 검색 서로 메이크업을 당신이 응용 프로그램이 합법적 불구하고 폐쇄 할 수있는 쉬운 방법을 제공 - 주기적으로 다시 시작 필요!

그것은 말했다, 그리고 당신의 의견 "때로는 내가 그 자체로 닫혔다는 것을 알 수 있습니다"라고 나는 그것이 폐쇄 이유를 알아 내려고 실제로 시작합니다 ...


컴퓨터를 미디어 서버로 사용하고 문제가되는 응용 프로그램은 mediaserver.exe입니다. 그것에 대해 악의적 인 것은 없습니다. 응용 프로그램을 닫고 싶은 시나리오를 예측할 수는 없지만 스크립트를 종료하거나 박쥐를 먼저 종료 할 수있는 이유는 없습니다. 또한 소프트웨어를 작성할 수 없지만 박쥐 파일에 익숙합니다. 즉, 나는 멍청한 놈입니다.
Sid

사과-그것은 내가 "프로그래머"그룹에 있다고 생각하고 당신이 직접 앱을 작성했다고 생각할 것입니다 :-) 서투른 소리 @ @KCotreau에 의해 설명 된 "일정 된 작업"접근 방식을 제안합니다
Steve Mallam


-1

이것은 더 낫다! 이것은 내 테스트 게임 서버에 사용했던 일부 코드입니다 .bat 파일에 저장해야합니다

@echo off
rem This is a comment line
rem This one is a comment too
rem Following line ensures the working directory is searched in C:
C:
rem Join the correct directory, where the server stuff lies in:
cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\"
:love_spaghetti_code
bin\server.lnk --config minetest.conf ^
            --worldname "Land of Blockheads" ^
            --gameid minetest_game ^
            --port 30000 ^
            --logfile bin/debug.txt

echo Restarting server....
goto love_spaghetti_code

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