2009년 7월 24일 금요일

[DOS] 어제 날짜의 로그파일 FTP로 일괄 가져오기

내가 하는 일 중에 3대의 웹서버로 들어온 apache access log 를 이용해서 전날의 transaction 을 분석하는 게 있다. 지금 하는 업무에 맞게 몇가지 category 로 나누고 그 숫자를 파악하는 건데, access log 를 매일 새벽 shell script 를 돌려 csv 파일로 만들어둔다.

 

그리고 나선 csv 파일을 보기 좋게 Excel Pivot 으로 정리하려고 하는데 그러려면 일단 csv 파일들을 로컬로 FTP 다운로드 받아야한다. 문제는 이게 꽤나 귀찮다는 거...

 

3대의 서버에 FTP 로 접속해 경로 찾아들어가 파일찾아서 내 로컬PC 경로로 다운로드 받으려면 아주 귀찮다.

 

사람이 일을 하다보면 자꾸 잔머리만 늘어가는 듯...

내 로컬PC 를 FTP 서버로 만들어 웹서버에서 매일 쏴주면 좋겠지만, 개인 노트북이 무슨 24시간 운영중도 아니고 그래서 DOS Batch 파일을 하나 만들었다. 매일 그냥 한번 실행만 시켜주면 3군데 서버에서 알아서 전날 로그 csv 파일을 가져다 로컬 PC 에 넣어준다. 기특한 놈.. ㅋㅋ

 

문제는 전날의 날짜 구하기. 오늘 날짜야 date /t 하면 그냥 이쁘게 나온다만, 하루전은? 아주 난감하다. 그렇다고 무턱대고 오늘날짜 빼기 1 을 할 수도 없는 노릇이고...

 

구글링을 해보니 나와 같은 고민을 한 사람이 역시나 있다.

 

http://www.robvanderwoude.com/datetiment.html#Yesterday ... Browse other questions tagged dos scripting date or ask your own question. ...

 

위의 예제는 온갖 format 의 date 형식에 상관없이 적용되도록 좀 복잡한데, 우리야 그저 yyyy-mm-dd 로 나온다고 가정하고 심플하게 가자. 그리고 예제에선 "며칠전" 을 parameter 로 입력받으나, 우린 날짜는 그냥 하루전이면 족하다.

 

그러나 무조건 하루전이면 되나? 월요일에 출근해서 돌리면 전날 일요일 꺼를 갖고올텐데 그럼 금요일하고 토요일은? 그래 날짜를 입력하면 그 날짜 로그를 가져오고, 그냥 실행만 시키면 default 로 전날짜 로그를 가져오도록 슥삭슥삭...

 

하루 전 날짜는 이제 구했으니 FTP 로 파일을 가져오는 걸 해봐야 할텐데 이 역시 다른 분의 소스를 참조했다.

 

by 부평지킴이 | 2009/04/13 22:25

[Windows/DOS Batch] 특정 폴더의 파일을 날짜가 포함된 파일로 압축하여 FTP로 전송하기. 2009/04/13 22:25 in 운영 체제. 특정 폴더에 생성된 파일들을 DOS Batch(배치파일) 스크립트를 작성한 스크립트를 이용하여 다른 서버로 FTP를 이용하여 전송 ...

 

그렇게 해서 정리하면 아래와 같이 된다. 로그파일은 stat_XX.yyyymmdd.csv 라고 가정한다.

(ip, user, password, path 는 감춰주는 센스.. ㅡ.,ㅡ)

 

@echo off

set logDate=%1
if not "%logDate%"=="" goto FTPGET

for /F "tokens=1" %%a in ('date /t') do set DATE_TODAY=%%a

REM [Date Format = yyyy-mm-dd]
set yyyy=%DATE_TODAY:~0,4%
set mm=%DATE_TODAY:~5,2%
set dd=%DATE_TODAY:~8,2%

set dayCnt=1

REM Substract your days here
set /A dd=1%dd% - 100 - %dayCnt%
set /A mm=1%mm% - 100

 

:CHKDAY
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1

 

:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30

 

REM ** Month 12 falls through

 

:SET31
set /A dd=31 + %dd%
goto CHKDAY

 

:SET30
set /A dd=30 + %dd%
goto CHKDAY

 

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29

 

:SET28
set /A dd=28 + %dd%
goto CHKDAY

 

:SET29
set /A dd=29 + %dd%
goto CHKDAY

 

:DONE
if /I %mm% LSS 10 set mm=0%mm%
if /I %dd% LSS 10 set dd=0%dd%
set logDate=%yyyy%%mm%%dd%

 

:FTPGET
setlocal

 

echo open {host1}> ftp_get.sh
echo user {user1} {password1}>> ftp_get.sh
echo prompt off>> ftp_get.sh
echo cd {path1}>> ftp_get.sh
echo get stat_1Q.%logDate%.csv>> ftp_get.sh
echo close>> ftp_get.sh

 

echo open {host2}>> ftp_get.sh
echo user {user2} {password2}>> ftp_get.sh
echo prompt off>> ftp_get.sh
echo cd {path2}>> ftp_get.sh
echo get stat_2Q.%logDate%.csv>> ftp_get.sh
echo close>> ftp_get.sh

 

echo open {host3}>> ftp_get.sh
echo user {user3} {password3}>> ftp_get.sh
echo prompt off>> ftp_get.sh
echo cd {path3}>> ftp_get.sh
echo get stat_3Q.%logDate%.csv>> ftp_get.sh
echo quit>> ftp_get.sh

 

c:\windows\system32\ftp -v -n -s:ftp_get.sh

del ftp_get.sh

 

rename stat_1Q.%logDate%.csv stat_1Q_%logDate%.csv
rename stat_2Q.%logDate%.csv stat_2Q_%logDate%.csv
rename stat_3Q.%logDate%.csv stat_3Q_%logDate%.csv



 

 

댓글 3개:

  1. trackback from: MBR 복구및 삭제
    마스터부트레코드(MBR)복구하기 컴퓨터 사용중 잘못된 명령어나 바이러스 감염또는 운영체제 설치로 인하여 하드디스크의 Boot(부팅)영역이 사라지는 경우가 가끔 있습니다. 이런경우 상당히 곤혹스럽고 난감합니다. 최악의 경우에는 하드 디스크 파티션 자체가 날라가거나 마스트 부트 레코드(mbr)로 부팅을 못하는데 이를 해결하는 방법입니다. 우선 예전의 Dos(도스)용 부팅디스크나 윈도우9x의 bootdisk가 있으면 이를 간단히 해결할수 있다. 도스용 3..

    답글삭제
  2. 우와... 이게 얼마만에 보는 배치 스크립트랍니까...

    옛추억에 눈물이 좔좔좔...ㅠㅠ



    VB Script로 하셨으면 조금 쉬우셨을텐데... 초큼 아쉽네요... ^_^;;

    답글삭제
  3. @나림아빠 - 2009/09/08 17:39
    ㅎㅎ 저도 필요해서 찾아보고 만들어놓고는 다신 볼 일 없는 애들이죠.



    나림아빠님께서도 오셨네요~

    블로그는 공동집필 하시나봐요~

    답글삭제