stdout redirection 하는 파일 삭제 후 signal 25 발생 시 파일 위치

laydra의 이미지

안녕하세요.

아래 파일이 도대체 어디에 존재하는지 알고 싶네요...
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 로 처리하면 될거 같은데

원인이 뭔지 잘모르겠네요..도움 부탁드립니다..ㅜㅜ

김정균의 이미지

[root@host ~]$ lsof -p [프로세스]
test 19108 root 1u REG 104,2 598634496 537956 /temp/test.out (deleted)

위와 같이 파일이 deleted mark가 되어 있다면, file description이 열려져 있는 상태에서 file이 삭제 되었다는 의미입니다. 해당 process를 kill 한 다음 다시 시작하시면 해결이 될 겁니다.

이 문제를 좀 더 grace하게 처리 하시려면 log를 lotate 시키는 것도 한 방법 입니다. logrotate를 이용하는 방법도 있고, script 내에서 하는 방법도 있습니다. 후자의 경우에는 다음과 같이 할 수 있습니다.

print "blah blah" >> /temp/test.out-$(date +%Y%m%d)   # 일별
print "blah blah" >> /temp/test.out-$(date +%Y%m%d%H) # 시간별
laydra의 이미지

파일 삭제만 하면 되는건 줄 알았는데 file description 사이즈 때문에 signal 25가 발생할 수 있네요. 답변 감사합니다..^^

ymir의 이미지

시스템에 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 』

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.