생성 또는 사용중인 파일을 체크후에 복사
글쓴이: keuyeon / 작성시간: 수, 2011/11/09 - 8:47오후
자바에서 특정 디렉토리에 파일을 생성해 내용을 쓰고나면
주기적으로 해당 디렉토리에 있는 파일들을 다른 경로로 복사 또는 이동을 시키려고 합니다.
그런데 문제는 파일이 생성중이거나 쓰고 있을 때 파일이 복사가 되면 내용이 없는 빈 파일이 복사가 되지 않을까 싶어서
현재 이 파일이 생성중건지 또는 쓰고있는지를 쉘 스크립트에서 체크를 하고 싶습니다.
구글링을 해보니 아래 리눅스포럼에서 lsof 라는 유틸을 아래처럼 사용한 케이스가 있더라구요.
http://www.linuxforums.org/forum/programming-scripting/64925-how-check-if-file-being-read.html
FILE_NAME="music.mp3"
FILE_OPEN=`lsof | grep $FILE_NAME`
if [ -z $FILE_OPEN ]
then
echo "File NOT open"
else
echo "File Open"
fi
그래서 lsof 를 이용해볼까 했는데 여기 환경이 lsof가 없는 리눅스네요. -_-;;
혹시 생성중이거나 사용중인 파일을 체크하고 문제없이 복사할 수 있는 다른 방법이 있는지 알고 싶습니다.
꼭 쉘이 아니더라도요.
Forums:
lsof homepage
lsof homepage에서 내려받을 수 있는 데요.
http://people.freebsd.org/~abe/
임의로 'lsof' 를 설치할 수가 없어서 다른
임의로 'lsof' 를 설치할 수가 없어서 다른 방법을 찾아야 할듯 합니다.
아~ 딱히 꼼수도 생각아나고 답답하네요. ㅡㅜ
'Dante once said that the hottest places in hell are reserved for those who in a period of moral crisis maintain their neutrality' -J.F Kennedy, 1963
리눅스에서 lsof 프로그램의 기본 동작은
리눅스에서 lsof 프로그램의 기본 동작은 /proc/PID/ 디렉터리 안의 하부 디렉터리들을 뒤지며 정보를 수집한 다음 적절히 가공해서 출력하는 것입니다.
정해진 어떤 프로그램이 특정 파일을 열고 있는지 여부를 확인하고 싶으시다면... 1) 그 프로세스의 pid를 구한 다음 2) /proc/???/fd 디렉터리 안에 ("???" 위치에 pid) 그 파일로의 심볼릭 링크가 있는지 확인해 보시면 됩니다. 단, 파일을 만드는 프로그램과 확인하는 셸 스크립트의 사용자 ID가 다르다면 접근 권한 문제가 발생할 수 있습니다.
한편 이런 문제(쓰기가 완료되지 않은 파일에 대한 접근을 방지하는 문제)에 많이들 쓰는 해결책은 1) 임시 파일명으로 파일 쓰기를 한 다음 2) 쓰기가 끝나면 임시 파일명을 정식 파일명으로 바꿔주는 방법입니다. 그런 방법을 쓰기는 어려운 조건인가 봅니다?
$PWD `date`
임시파일에서 정식파일로 바꾸는 방법 고려해
임시파일에서 정식파일로 바꾸는 방법 고려해 보겠습니다.
조언 감사드립니다.
'Dante once said that the hottest places in hell are reserved for those who in a period of moral crisis maintain their neutrality' -J.F Kennedy, 1963
http://oss.sgi.com/projects/f
http://oss.sgi.com/projects/fam/ 이런것도 한번 고려해보시죠.
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
overview 설명만 봐선 뭔지 잘 모르겠네요.
overview 설명만 봐선 뭔지 잘 모르겠네요. -_-a
'Dante once said that the hottest places in hell are reserved for those who in a period of moral crisis maintain their neutrality' -J.F Kennedy, 1963
왜 fuser를 안쓰시나요?NAME
왜 fuser를 안쓰시나요?
그냥 fuser file_path
를 입력하시면
해당 파일을 현재 소유하고 있는( 즉, 실행을 시키고 있던, 입/출력용으로 열고 있던... )
모든 프로세스들을 출력합니다.
lsof가 없는 시스템들은 가끔 존재해도
fuser가 존재하지 않는 시스템은 거의 없습니다.
한번 확인해보세요.
이 시스템이 그렇네요. fuser 두 없어요. 아오~
이 시스템이 그렇네요.
fuser 두 없어요. 아오~ -_-a
여튼 좋은 정보 고맙습니다.
'Dante once said that the hottest places in hell are reserved for those who in a period of moral crisis maintain their neutrality' -J.F Kennedy, 1963
댓글 달기