스케줄러로 도스 배치파일로 특정 작업을 시킬 때 기존에는 start /b로 작업을 시켰다.
문제상황
기존에 쓰던 명령어는 다음과 같았다.
start /b “작업별칭” myjob.bat 인자1 인자2 > y:\작업로그.log
의미 : myjob.bat이라는 배치파일을 실행시켜서 그 결과를 y드라이브의 작업로그.log에 저장시켜라.
(참고로 >는 파일을 덮어쓰면서 새로 저장하고 >>는 기존 파일의 내용 끝에 로그를 추가한다)
그런데 start /b를 하면 /b 옵션 설정으로 인해 별도의 창을 열지 않고 작업을 시키므로 해당 배치파일(myjob.bat말고 start가 들어있는 배치파일)이 종료되지 않아 재실행을 시킬 때 문제가 발생했다.
왜냐하면 내 경우 최초 실행시 작업스케줄러를 통해 실행을 시켰기 때문에 백그라운드에 계속 떠 있어 프로세스를 찾아 강제로 종료한 후 다시 시작을 시켜야 했다.
그래서 원래 start명령의 의도대로 /b를 빼고 별도의 창을 열어 실행하고 종료되도록 변경했더니 이번엔 로그가 리다이렉션이 안되는 문제가 발생했다.
해결방법
명령어를 다음과 같이 수정하여 해결하였다.
start cmd /c myjob.bat 인자1 인자2 > y:\작업로그.log
위와 같이 하면 실행시킨 배치파일은 바로 종료되고 myjob.bat의 로그도 정상적으로 리다이렉션 된다. 굿!
혹시 배치파일에서 call과 start의 차이에 대해 궁금하신 분은 다음 게시물을 참조바란다.