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


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.