본문 바로가기

TechLog

윈도우 서버 시스템 유지보수관리 배치파일 작성시 팁.

SM 업무를 하다 보면 시스템의 서비스를 내리고 올리거나, 새로운 프로세스를 실행시키거나, 파일을 백업하거나 하는 작업이 필요할 때가 왕왕 있다. 물론 이런 과정을 처리할 수 있는 프로그램을, 충분한 시간을 들여서 요구사항을 수집하고 기획을 하고 별도의 프로그래밍 환경에서 개발해 배포하고 유지보수까지 할 수 있었으면 좋겠지만... 어디 우리네 IT 환경이 그렇게 호화롭던가 -_- 그냥 횽아들이 하라고 하면 하는거다 ...

이럴 때 꽤 유용한 것이 별도의 프로그래밍 툴도 필요 없고 그냥 메모장에서 작성해도 되는 배치 파일(*.bat)인데, 개념을 모르는 사람은 커맨드 프롬프트에서 사용할 수 있는 일종의 스크립트라고 생각하면 편할 것이다. 커맨드 프롬프트가 뭐냐고? 시작 -> 실행 -> cmd 엔터를 입력하시라.


모르면 할 수 엄따..



사실 뭐 이런저런 유형의 작업이 있지만, 유지보수 작업에서 자주 등장하는 것 몇 가지만 생각나는대로 적어보겠다 :


- 특정 프로세스 죽이기
taskkill이라는 명령이 있다. 말 그대로 태스크를 죽이는 건데... 일단 윈도 도움말에 있는 예제를 보자 :

 TASKKILL /S 시스템 /F /IM notepad.exe /T
 TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
 TASKKILL /F /IM notepad.exe /IM mspaint.exe
 TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
 TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
 TASKKILL /S 시스템 /U domain\username /FI "USERNAME ne NT*" /IM *
 TASKKILL /S 시스템 /U 사용자 이름 /P 암호 /FI "IMAGENAME eq note*"
그냥 뭐 별거 없고 막 죽인다. 다른 시스템에 있는 프로세스도 죽일 수 있으니 중앙 서버 하나에 배치파일 하나 놔 두고 여러 서버의 프로세스를 한꺼번에 올렸다 내리는 등의 작업에도 활용할 수 있겠다. 또한 /F 옵션은 강제로 프로세스를 종료시키는 옵션인데 ... 가끔 보면 프로세스에 종료 메시지를 날렸을 때 해당 프로세스가 자신의 작업을 정리하고 종료를 제대로 하면 좋은데, 커넥션이 물리거나 해서 "응답 없음" 상태로 빠지는 경우가 종종 있다. 이럴 때는 일단 /F 옵션 없이 종료 메시지 날렸다가 시간을 좀 보낸 다음 나중에 재차 /F 옵션을 날려서 확인사살을 해 주는 방법도 고려해볼 수 있다.


- 프로세스 실행하기
배치파일 내의 명령들은 순차적으로 실행된다. 배치파일로 특정 실행파일을 실행하면, 앞서 실행된 프로세스가 종료될 때 까지 기다리고, 다음 명령을 실행하고... 하는 식으로 이어진다. 뭐 배치 작업이 별로 많지 않고, 작업 자체가 순차적으로 실행되어야 한다면 상관없지만, 여러 개의 프로세스를 동시에 실행되게 함으로써 작업의 효율을 높일 수도 있다. start 명령을 사용하면 실행한 프로세스가 커맨드 창이 아닌 별도의 창에서 실행되므로, 병렬로 여러 프로세스를 실행할 수 있다.

START ["제목"] [/D경로] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/WAIT] [/B] [명령어/프로그램]
      [매개 변수]

START 창이름 TaskGOGOGO.exe
옵션만 봐도 뭔 놈의 기능인지는 대충 감이 올 것이다.



- 파일 백업하기
뭐 이건 그냥 copy, move 명령만 알고 있으면 되긴 하는데.. 그냥 팁입니다. 팁.
횽아들은 코드만 보면 뭔지 다 아는거다 :
move /y "*.*" "%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%\."

... 뭐 무슨 뜻인지 모르겠다고 슬퍼하지 않아도 된다. 설명해주꾸마...
현재 폴더에 있는 파일들을 어딘가로 옮기는 명령인데, %DATE:~0,4% 이런게 뭔지 좀 감이 안 온다. 하나하나 설명하자면, % 기호는 커맨드 프롬프트에서 변수를 표기할 때 쓰는 기호다. 그러니까 원래대로라면 %DATE%라는 변수를 사용하는 건데, 이 %DATE% 변수는 커맨드 프롬프트에서 미리 정의되어 있는 변수로 현재 날짜를 반환한다. '2007-05-02' 뭐 이런 식으로. 그리고 뒤에 붙은 기호는... 그냥 0번째 위치부터 문자 네 개 가져오는거다. '2007'을 가져오게 되겠지. %TIME%도 마찬가지고.

그러니까 결론적으로, 현재 폴더에 있는 파일을 '20070502_162420'이란 폴더로 옮기는 작업을 한다.
자세히 알고 싶은 사람은 set /? 를 입력해서 도움말을 읽어보면 될 것이다.



- IIS 리셋하기
iisreset을 입력하자.
뭔놈의 설명이 더 필요해.

얼마나 자주 죽는 서비스길래 명령이 따로 다 있냐.



- 서비스 죽이고 살리기
서비스는 일반 프로세스와 다르게 taskkill로 막 죽이고 이럴 수 ... 아 있구나. 죽일 수 있다. 그런데 ;; 여튼 서비스는 서비스이니까, 서비스를 내리고 올리는 명령어를 사용하는게 여러모로 좋다. 따지지 말자.

net start / net stop 명령어를 사용할 수 있다.

net start
net stop "서비스 이름"
net start "서비스 이름"

net start는 현재 컴퓨터에서 실행중인 서비스의 목록을 보여주고, 그 뒤에 서비스 이름을 입력해서 서비스를 올리거나 내릴 수 있다.



이렇게 해서 만든 배치 파일은 at 명령이나 '예약된 작업'에 등록해서 일정 시간마다 실행하게 해 두면 자동 유지 보수 작업까지 처리할 수 있다는 사실. 짠짠. 다들 배치파일을 활용해서 미칠듯한 속도로 시스템 유지보수관리작업을 마무리지어보도록 합시다.

'ㅂ')/  오늘은 여기까지-