컴퓨터가 실행될 때마다 실행하려는 서버 응용 프로그램이 있으며 대개 자체적으로 닫히는 것을 제외하고는 일반적으로이 경우입니다.
응용 프로그램을 모니터링하고 닫을 때 다시 시작하기 위해 실행할 수있는 박쥐 또는 스크립트가 있습니까?
컴퓨터가 실행될 때마다 실행하려는 서버 응용 프로그램이 있으며 대개 자체적으로 닫히는 것을 제외하고는 일반적으로이 경우입니다.
응용 프로그램을 모니터링하고 닫을 때 다시 시작하기 위해 실행할 수있는 박쥐 또는 스크립트가 있습니까?
답변:
항상 작동하지는 않지만 (프로그램 종류에 따라 달라짐) 일반적으로 다음과 같은 배치 파일을 만들 수 있습니다.
@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 초마다 프로그램을 시작하려고 시도합니다.
위의 답변을 바탕으로 해당 명령을 배치 파일에 넣은 다음 해당 배치 파일을 1 분마다 예약 된 작업으로 실행하도록 설정하는 것이 좋습니다. 이와 관련된 오버 헤드는 거의 없으며 프로세스가 중단되었다는 사실과 상관없이 프로세스를 명시합니다.
나는 추측 바로 이 질문에 대한 대답에 따라 달라집니다 왜 당신이 그것을 할 싶어. 실수로 시스템을 종료하려고합니까? 기계 사용자 (예 : 직원이 모니터링 소프트웨어를 닫음)에 의해 우연히 "악의적 인"종료를 방지합니까? 심각하고 숙련 된 악의적 인 공격을 방지 하시겠습니까? 맬웨어를 직접 작성하려고합니까 (이 경우 ;-)).
또한 다른 의견자가 언급했듯이 Windows 서비스를 작성한 경우 (예 :)
개인적으로, 나는 아마도 두 번째 응용 프로그램을 작성하고 같은 방식으로 시작하여 시작합니다. 이 두 응용 프로그램을 검색 서로 메이크업을 당신이 응용 프로그램이 합법적 불구하고 폐쇄 할 수있는 쉬운 방법을 제공 - 주기적으로 다시 시작 필요!
그것은 말했다, 그리고 당신의 의견 "때로는 내가 그 자체로 닫혔다는 것을 알 수 있습니다"라고 나는 그것이 폐쇄 이유를 알아 내려고 실제로 시작합니다 ...
ReStartMe 2.0 [ Mirror ] 라는 프로그램을 사용할 수 있습니다 .
프로세스를 모니터하고 닫으면 다시 시작합니다.
이것은 더 낫다! 이것은 내 테스트 게임 서버에 사용했던 일부 코드입니다 .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)