[OS/WINDOW]배포후 서버재시작에 batch와 윈도우 스케줄러 활용하기
이직한 회사는 배포관리자가 따로 있다.
이전 회사에서는 작업한 사람이 배포하거나 모아서 한꺼번에 성과장님이 해주셨는데 여기서는 같이 입사한 대리님이 배포담당자이다.
배포는 사용자가 없는 시간에 해야하기에 대리님이 조금씩 야근하게 되는 게 속상했고 어떻게하면 도와드릴수있을까 고민하다가 배포 후 작업물 테스트를 같이 나눠하자고 말씀드리는 걸로 만족해야만했다.
하지만 오늘 점심시간에 팀장님이 더 좋은 방법을 소개해주셨다.
바로 bat파일로 작업스케쥴러를 돌리는 것이다.
유레카!
우리 회사 프로젝트는 윈도우 서버에 서비스로 등록되어 있으므로 작업스케쥴러를 통해서 특정시간에 서버를 재시작할 수 있다.
Batch파일 생성
tomcat_8080_restart.bat
파일을 생성 후 아래 코드를 입력한다.
미리 알아야하는 건 재시작하고싶은 서비스이름이다.
서비스 이름은 [시스템-서비스]에서 특정 서비스를 더블클릭하면 팝업에 서비스 이름이 표시된다. 그걸 기입하면 된다. 여기서는 서비스이름의 예시로 testProject
를 사용할 것이다.
1 | @echo off |
1 log 텍스트파일에 저장하는 이유?
위에서 두 개의 tomcat8080_stop_log.txt파일과 8080_start_log.txt파일을 생성하고 삭제한다.
이렇게 log 텍스트파일에 저장하는 이유 변수에 할당하기 위해서이다.
변수에 할당한 뒤 서비스 중지가 성공했는지 그 성공여부를 확인한다.
batch 자동재실행으로 구글에 검색해보면 stop하고 바로 start하는 스크립트코드가 많은데 그렇게 하면 stop에 실패했을경우 재시작되지않아 서버 반영이 안될 수 있다고 팀장님이 말씀해주셨다. (천재 팀자님 감사합니다!)
2 goto 가 반복문의 역할?
goto는 코드의 특정 위치로 이동하는 명령으로, 반복을 구현할 수 있는 도구로 사용되기는 하나 본질적으로 반복 명령어는 아니다.
goto를 반복처럼 사용하는 경우는 코드 흐름을 특정 위치로 계속 이동시키는 방식으로 반복을 흉내 내는 것이다.
1 | :Start |
위의 스크립트에서 조건이 참이면 goto Start 명령으로 다시 :Start 레이블로 이동하여 코드를 반복 실행한다.
3. if 조건의 의미는?
“서비스를 시작하거나 멈추고 있습니다. 나중에 다시 하십시오.” 메시지는 Windows의 서비스 관리 명령(net start 또는 net stop)을 실행할 때 서비스가 이미 중지 중이거나 시작 중인 상태에서 발생하는 일반적인 시스템 응답이다.
만약 서버가 한글이 아닌 영문이라면 아래 영문윈도우 대응메시지를, 일본윈도우면 일본윈도우 대응메시지를 넣어야한다.
- 한글 Windows에서의 메시지: “서비스를 시작하거나 멈추고 있습니다. 나중에 다시 하십시오.”
- 영문 Windows에서의 대응 메시지: “The service is starting or stopping. Please try again later.”
- 일본 Windows에서의 대응 메시지: “サービスは開始または停止しています。後でもう一度実行してください。”
윈도우 작업스케쥴러 등록
시작 옆 돋보기에 작업 스케줄러
를 검색한다.새 작업만들기
를 누르고 원하는 트리거를 설정한다.
트리거는 크론식 사용없이 GUI로 간단히 설정할 수 있다.
해당 내용은 나보다 아래 블로그를 참고하면 이미지와 함께 자세한 설명을 볼수있다.
또 어떤 작업들을 자동화 할 수 있을까?
서버재시작뿐만 아니라 격주로 로그파일 지우기 등에 활용할 수 있다.
1 | forfiles /P "C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.100\logs" /M *.* /D -14 /C "cmd /c del @file" |
위 스크립트의 실행 흐름을 보자.
- C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.100\logs 경로에서 로그 파일 검색.
- 파일 이름과 수정 날짜를 확인하여 14일 이전에 수정된 파일을 찾음.
- 조건에 맞는 파일에 대해 del 명령을 실행하여 파일을 삭제.
자세한 설명
/P 경로
: 작업할 파일이 위치한 기본 경로를 지정한다. 이 경우, Tomcat 서버의 로그 파일 디렉터리이다./M *.*
: 경로 내의 파일 이름 패턴을 지정한다. 여기서는 .로 모든 파일(.* 확장자 포함)을 대상이다./D -14
: 파일의 수정 날짜 조건을 지정한다.-14
는 14일 이전에 수정된 파일을 대상으로 한다는 뜻! 예를 들어, 오늘이 2024년 12월 9일이라면, 2024년 11월 25일 이전에 수정된 파일들이 대상이 된다./C "cmd /c del @file"
: 각 대상 파일에 대해 실행할 명령을 지정한다.cmd /c
는 명령 프롬프트에서 명령을 실행한 후 종료하라는 뜻!del @file
은 대상 파일을 삭제한다는 의미이다.
주의사항
삭제된 파일은 복구가 어려우므로 백업은 필수다!
만약 실행전 삭제할 파일들을 확인하려면 cmd /c echo @file
명령으로 테스트할수있다.
1 | forfiles /P "C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.100\logs" /M *.* /D -14 /C "cmd /c echo @file" |
참고
- 팀장님지식
- 구글링