stdout redirection 하는 파일 삭제 후 signal 25 발생 시 파일 위치
글쓴이: laydra / 작성시간: 화, 2017/02/07 - 6:25오후
안녕하세요.
아래 파일이 도대체 어디에 존재하는지 알고 싶네요...
inode 부터 tty 이것저것 보고 있는데 지식이 얕아 궁금증이 해결되지 않네요...
하나의 프로세스의 printf 로그를 stdout 으로 redirection 하여 파일로 쌓고 있다가 ext3 파일 시스템에서
2G가 넘어 다운이 발생해서 해당 로그파일을 주기적으로 지워주는 스크립트를 구동 시켰습니다.
그런데 이게 파일은 지웠는데 또 printf 를 찍다가 signal 25를 발생시키더군요... 한참을 찾아 해매다
lsof -p [프로세스] 명령어로 상태를 보니
test 19108 root 1u REG 104,2 598634496 537956 /temp/test.out (deleted)
위와 같이 deleted 로 되어있는데도 파일 사이즈가 늘어나고 있더군요..
해당 문제는 printf 를 없애거나 /dev/null 로 처리하면 될거 같은데
원인이 뭔지 잘모르겠네요..도움 부탁드립니다..ㅜㅜ
Forums:
[root@host ~]$ lsof -p [프로세스]
위와 같이 파일이 deleted mark가 되어 있다면, file description이 열려져 있는 상태에서 file이 삭제 되었다는 의미입니다. 해당 process를 kill 한 다음 다시 시작하시면 해결이 될 겁니다.
이 문제를 좀 더 grace하게 처리 하시려면 log를 lotate 시키는 것도 한 방법 입니다. logrotate를 이용하는 방법도 있고, script 내에서 하는 방법도 있습니다. 후자의 경우에는 다음과 같이 할 수 있습니다.
감사합니다.
파일 삭제만 하면 되는건 줄 알았는데 file description 사이즈 때문에 signal 25가 발생할 수 있네요. 답변 감사합니다..^^
음 ..
시스템에 disk full 나게 해서 서비스를 방해할 수 있는 고전적인 트릭입니다.
파일 하나에 무한 쓰기 하는 프로세스 하나 띄우고, 그 파일을 지우면..
파일은 디스크에서 사라지더라도 프로세스에서 open 한 fd 는 유효해서 파일에 대한 I/O 를 계속 수행합니다.
일단은 정상적으로 프로세스를 먼저 종료한 후에 파일을 정리하는게 맞겠죠.
나중에 디스크는 점점 여유 공간이 없어지는데, 정작 디스크에서 용량을 차지하는 큰 파일을 찾을 수 없는 경우에는..
lsof / 와 같이 lsof 명령에 mountpoint(/) 나 파티션 이름(/dev/sda1)을 주면 해당 파일 시스템에서 열린 모든 파일 목록이 나오는데..
거기서 deleted 로 마크된 파일이 있는지 찾아 보는 것도 도움이 될 겁니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기