2013년 2월 1일 금요일

asp.net 일정기간 지난 디렉토리 삭제.

CreationTime 이란 값으로 가져온 걸 뿌려 봤더니, 2013-01-31 오후 3:11:42 << 이런 형식으로 나온다.

이걸 어떻게 비교 하나 검색해보니 아래와 같이 비교 하더라.

출처:http://stackoverflow.com/questions/2222348/how-to-delete-files-older-than-3-months-old-in-a-directory-using-net

http://msdn.microsoft.com/ko-kr/library/system.io.directoryinfo.aspx
            //string dirName = "c:\\Temp";
string dirName = "c:\\tmp";

// C: 루트 디렉토리 정보를 가져옴
DirectoryInfo dInfo = new DirectoryInfo(dirName);

// 하위 FileInfo(파일정보) 배열을 받아옴
FileInfo[] fInfoSub = dInfo.GetFiles();

// 하위 DirectoryInfo(디렉토리정보) 배열을 받아옴
DirectoryInfo[] dInfoSub = dInfo.GetDirectories();

Response.Write(dInfo.FullName);
Response.Write("<br/>");
Response.Write(dInfo.CreationTime);
Response.Write("<br/>");

//if (dInfo.CreationTime < DateTime.Now.AddMonths(-3))
if (dInfo.CreationTime < DateTime.Now.AddMilliseconds(-1))
{
Response.Write("3개월이 지난 디렉토리입니다.");
dInfo.Delete(true); /true 값을 주면 하위 디렉토리,파일까지 삭제.
}
else
{
Response.Write("3개월이 지나지 않은 디렉토리입니다.");
}

 



            //2개월 이상 디렉토리 삭제
DirectoryInfo dirTemp = new DirectoryInfo(realORtestDir);
foreach(DirectoryInfo dirs in dirTemp.GetDirectories())
{
if (dirs.CreationTime < DateTime.Now.AddMonths(-2))
{
//Response.Write("2개월이 지난 디렉토리입니다.");
//Response.Write(dirs.FullName);
dirs.Delete(true);
}

}

asp.net 네트워크 드라이브에 파일 쓰기

찾아 봤는 데, 여러가지 방법이 있지만 제일 쉽게 됬던 방법이다.

1. iis 관리자 -> IIS 영역 -> 인증 -> asp.net 가장 -> 작업(편집), 사용 -> 관련 아이디 패스워드 지정.

2. asp.net에서 경로 지정시 이런 형식으로 사용한다.
 saveDir = "\\\\192.168.0.1\\imgData\\" + today;

2013년 1월 29일 화요일

윈도우 telnet 자동 로그인

윈도우에서 telnet 자동 접속 후 명령어 실행하는 프로그램입니다.

확장자는 .vbs 로 합니다.

사용법

1. C:\oneIP.txt 파일을 만들고 한줄씩 접속할  아이피를 넣어준다.

2.아래 소스를 아무이름으로 .vbs 확장자로 만든다.

ex)telnet_auto.vbs

3. 실행한다.

ps. 접속 후 실행할 명령은 알아서 넣기.


set WshShell = WScript.CreateObject("WScript.Shell")
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const ipListFile = "C:\oneIP.txt"
Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

If FSO.FileExists(ipListFile) Then
Set SwitchIP = FSO.opentextfile(ipListFile, ForReading, False)
Else
Wscript.Echo "This file (" + ipListFile + ") does not exist."
Wscript.Quit
End If
Dim userId
Dim userPw

userId = "yourid"
userPw = "yourpass"

WScript.Echo "Don't touch Anything!!"

While Not SwitchIP.atEndOfStream
IP = SwitchIP.Readline()
WshShell.Run "cmd"
WScript.Sleep 100
WshShell.AppActivate "C:\Windows\system32\cmd.exe"

WScript.Sleep 100
rem telnet [address] [port]
WshShell.SendKeys "telnet " + IP + " 23{ENTER}"

WScript.Sleep 2000
rem [id]
WshShell.SendKeys userId + "{ENTER}"

WScript.Sleep 2000
rem [pwd]
WshShell.SendKeys userPw + "{ENTER}"

WScript.Sleep 1000
rem [command what you want]
WshShell.SendKeys "show ver{ENTER}"

WshShell.SendKeys "{ENTER}"
WScript.Sleep 2000
WshShell.SendKeys "exit{ENTER}"

Wend
WScript.Sleep 2000
WScript.Echo "Completed."


2013년 1월 3일 목요일

mysql 4.0 이하에서 bin 로그 제거

bin 로그 제거

mysql 버젼 : mysql Ver 12.22 Distrib 4.0.26, for pc-linux-gnu (i686)

my.cnf 에 아래의 옵션을 주면 되지만, MySQL 5.0.3 이상부터 지원.
expire_logs_days = 7
크론에 아래와 같이 등록 하여 사용하라고 했는 데, syntex 에러 발생
00 00 * * 7 /usr/local/mysql/bin/mysql -uroot -pxxxxx -e "PURGE BINARY LOGS BEFORE date_sub(now(), interval 7 day)";
출처

BEFORE 변수는 MySQL 4.1 (으)로부터 이용 가능하게 되어 있다고 함.;;
출처

할 수 있는 건, 아래 꺼 밖에 없음
PURGE MASTER LOGS TO 'mysql-bin.010';
스크립트 작성.
bin 로그 10개만 남기고 나머지 다 삭제.

 
#!/bin/sh
bin_log_path="/usr/local/mysql/data/"
bin_log_name="mysql-bin"
bin=${bin_log_path}${bin_log_name}

max_bin_index=`ls ${bin}.* | awk -F. '{print $2}' | sort -n | tail -1`
del_index=`expr ${max_bin_index} - 10`
if [ -f ${bin}.${del_index} ]
then
echo "${bin_log_name}.${del_index} 파일 존재"
echo "${bin_log_name}.${del_index} 이전 파일 제거"
/usr/local/mysql/bin/mysql -uroot -p패스워드 -e "PURGE MASTER LOGS TO '${bin_log_name}.${del_index}'";
fi

2012년 12월 12일 수요일

udp 소켓 생성 문제

윈도우 2008에서 c++로 작성한 프로그램이

tcp 소켓 생성은 정상적으로 되는 데, udp 소켓은 생성되지 않는 문제가 있다.

원인은 ip 값을 localhost로 만든 게 원인.

localhost 를 111.222.111.111 이런 식으로 직접 쳐 주면 해결 되었다.

 

역시 이상한 문제;;

도메인에 _(언더바) 사용의 폐해

도메인에 _(언더바) 사용의 폐해

하나의 도메인이 있다.
_(언더바)가 들어가 있는 도메인이다.
도메인에서 사용가능한 문자집합은 A-Z', 'a-z', '0-9', '-' 이다.
RFC 표준에는 _(언더바)를 사용가능한 문자집합에는 들어있지 않지만, 되긴된다.
네이버 카페인  DNS 전문가 카페  에서 검색해본 결과
bind 8.2.3 이전에서는 허용하기는 하였으나, 이후에는 엄격히 제한 되고 있다고 한다.

도메인에 언더바가 들어가도 일단 되긴 되는 데, 쓰지 말자.

이렇게 장엄하게 설명한 이유는 그 폐해를 경험 했기 때문이다.
이건 선임한테 물어봐도 안 나오고, 검색해도 안 나오는 문제다.

 

1. 익스에서 쿠키 생성이 안된다.
익스만 쿠키 생성이 안된다.
처음에는 익스의 쿠키 사용안함으로 되어있는 옵션를 확인 해 봤지만, 안된다.
익스 버젼 문제인가 했지만, 다른 버젼에서도 안됬다.
크롬,사파리,파이어폭스 심지어 안드로이드 기본 브라우져에서도
되는 쿠키 생성이 익스에서만 안된다.
처음 이런 현상을 접했을 때, 뭐 이런 경우가 다 있나 했는 데, 나중에 알고 보니 도메인 언더바 문제였다.
쿠키 생성은 물론 세션 생성도 안된다. 이경우는 도메인 변경후 테스트를 안해 봤지만, 확실할 것이다.

 
2. url창에서 해당 도메인으로 바로 들어가기가 안된다.
몇몇 브라우져에서는 언더바가 들어가 있는 도메인은 자동으로 http를 붙여서
해당 도메인으로 넘겨 주지 않고, 검색을 해 버린다.
그래서 http:// 를 붙여주고 나서야 해당 도메인으로 연결된다.

 

3. 안드로이드에서 .apk 파일 다운로드가 안된다.

처음에는 검색해서 나온 mime 타입 적어주는 걸로 해결하려고 했지만 안됬다.
일반 pc 브라우져에서는 해당 경로만 적어주면 모두 apk 파일이 다운된다.
안드로이드 기본 브라우저 나 크롬에서 해당경로를 적어 넣으면 파일 다운로드 실패가 뜬다.
(아이폰 사파리에서는 된다...필요는 없지만..)
이 역시 도메인 언더바 문제였다.

해결하고 나니 허탈하네...