페이스북에서 잠깐 언급했는데, 윈도 서버에서 구동되는 외부 제작 프로그램이 원인 불명으로 자꾸 죽는 증상이 발생해서 만들어 본 배치 파일입니다. 해당 배치 파일을 스케줄러에 넣어서 1분마다 한 번씩 실행하여 프로세스가 죽어 있는 경우 재실행하게 했죠.
\r\n\r\n배치 파일 내용은 아래와 같습니다.
\r\n\r\n@echo off\r\n\r\nset PNAME=faIpScanner.exe\r\nset DIR=C:\\\r\n\r\ntasklist /fi "imagena'...) /volume1/web/www/blog/wp-includes/post-template.php:256
0.6652 18254168 15. WP_Hook->apply_filters($value = '페이스북에서 잠깐 언급했는데, 윈도 서버에서 구동되는 외부 제작 프로그램이 원인 불명으로 자꾸 죽는 증상이 발생해서 만들어 본 배치 파일입니다. 해당 배치 파일을 스케줄러에 넣어서 1분마다 한 번씩 실행하여 프로세스가 죽어 있는 경우 재실행하게 했죠.
\r\n\r\n배치 파일 내용은 아래와 같습니다.
\r\n\r\n@echo off\r\n\r\nset PNAME=faIpScanner.exe\r\nset DIR=C:\\\r\n\r\ntasklist /fi "imagena'..., $args = [0 => '페이스북에서 잠깐 언급했는데, 윈도 서버에서 구동되는 외부 제작 프로그램이 원인 불명으로 자꾸 죽는 증상이 발생해서 만들어 본 배치 파일입니다. 해당 배치 파일을 스케줄러에 넣어서 1분마다 한 번씩 실행하여 프로세스가 죽어 있는 경우 재실행하게 했죠.
\r\n\r\n배치 파일 내용은 아래와 같습니다.
\r\n\r\n@echo off\r\n\r\nset PNAME=faIpScanner.exe\r\nset DIR=C:\\\r\n\r\ntasklist /fi "imagena'...]) /volume1/web/www/blog/wp-includes/plugin.php:205
0.6652 18255544 16. WP_Syntax::beforeFilter($content = '페이스북에서 잠깐 언급했는데, 윈도 서버에서 구동되는 외부 제작 프로그램이 원인 불명으로 자꾸 죽는 증상이 발생해서 만들어 본 배치 파일입니다. 해당 배치 파일을 스케줄러에 넣어서 1분마다 한 번씩 실행하여 프로세스가 죽어 있는 경우 재실행하게 했죠.
\r\n\r\n배치 파일 내용은 아래와 같습니다.
\r\n\r\n@echo off\r\n\r\nset PNAME=faIpScanner.exe\r\nset DIR=C:\\\r\n\r\ntasklist /fi "imagena'...) /volume1/web/www/blog/wp-includes/class-wp-hook.php:324
0.6652 18255544 17. preg_replace_callback($pattern = '/\\s*(.*)<\\/pre>\\s*/siU', $callback = [0 => 'WP_Syntax', 1 => 'substituteToken'], $subject = '페이스북에서 잠깐 언급했는데, 윈도 서버에서 구동되는 외부 제작 프로그램이 원인 불명으로 자꾸 죽는 증상이 발생해서 만들어 본 배치 파일입니다. 해당 배치 파일을 스케줄러에 넣어서 1분마다 한 번씩 실행하여 프로세스가 죽어 있는 경우 재실행하게 했죠.
\r\n\r\n배치 파일 내용은 아래와 같습니다.
\r\n\r\n@echo off\r\n\r\nset PNAME=faIpScanner.exe\r\nset DIR=C:\\\r\n\r\ntasklist /fi "imagena'...) /volume1/web/www/blog/wp-content/plugins/wp-syntax/wp-syntax.php:380
페이스북에서 잠깐 언급했는데, 윈도 서버에서 구동되는 외부 제작 프로그램이 원인 불명으로 자꾸 죽는 증상이 발생해서 만들어 본 배치 파일입니다. 해당 배치 파일을 스케줄러에 넣어서 1분마다 한 번씩 실행하여 프로세스가 죽어 있는 경우 재실행하게 했죠.
배치 파일 내용은 아래와 같습니다.
@echo off
set PNAME=faIpScanner.exe
set DIR=C:\
tasklist /fi "imagename eq %PNAME%" | findstr %PNAME% > null
if %ERRORLEVEL% == 0 (
echo %PNAME% is Running
) else (
echo %PNAME% is not Running. Now Run…
start /d"%DIR%" %PNAME%
)
위에서 faIpScanner.exe는 실제로 자꾸 죽는 그 프로그램은 아니고 테스트하기 위해서 넣어 본 것입니다. PNAME과 DIR 변수에 프로세스 이름과 프로세스가 위치한 디렉토리 명을 넣어주면 됩니다.
tasklist 명령에서 /fi 옵션을 사용해서 해당 프로세스가 작업 목록에 존재하는지 확인합니다. 그런데 tasklist 명령은 해당 프로세스가 없을 때도 종료 코드를 0으로 반환하더군요. 그래서 파이프로 findstr 명령을 줬습니다. 이 명령은 문자열을 확인하는 명령으로 오류 발생 시 0이 아닌 에러코드를 반환합니다.
직전에 실행한 프로그램의 에러 코드는 시스템 변수 %ERRORLEVEL%에 저장되므로 해당 에러코드를 확인해서 프로세스를 실행하게 하였습니다. 프로세스의 실행은 start 명령으로 했으며, 그냥 절대경로를 포함한 프로그램 명을 써 주면 배치 파일이 종료되지 않는 증상이 발생합니다.
스케줄러 등록 방법은 아래와 같습니다.
- [제어판-예약된 작업]에서 ‘예약된 작업 추가’ 더블클릭. 작업 예약 마법사 실행(윈도 2003 서버 기준)
- 해당 배치 파일을 등록. 마법사가 실행되는 동안에는 분 단위 실행 옵션은 보이지 않으므로, 일 단위로 실행되게 우선 설정
- 마지막에 ‘[마침]을 클릭하면 이 작업의 고급 속성 열기’를 클릭하고 마침
- 일정 탭에서 ‘고급’ 버튼 클릭
- ‘작업 반복’에 체크한 후, ‘매’ 항목을 1분으로, ‘언제까지’ 항목에서 ‘기간’을 선택하고 23시간 59분으로 설정 (즉, 이 스케줄은 매일 한 번 실행되며 23시간 59분동안 1분 간격으로 반복 실행된다는 의미임)
결과적으로 제 골치를 썩였던 프로그램은 수정이 완료되어서 이 배치 파일을 쓸 일은 없어졌지만, 기록 차원에서 남겨 둡니다.
덧. 생활코딩 페이스북 그룹에 전에 관련 내용을 올렸더니 Egoing님께서 ‘원인을 모르면 결과를 조지는 수밖에…’라는 명언을 남기셨더랬죠. ㅠㅠ
- 기가 도쿄 토이박스 / 글,그림 : 우메 / 서울문화사 / 발간 중
하나의 게임을 만들기 위해 봄부터 개발자는 그렇게 울었나…
제 글이 유용하셨다면 아래 손가락 모양을 꾸욱~ 눌러주세요.