![tmux 세션의 `tail -f data_log | grep 키워드가 하드 디스크 소모를 일으킬 수 있는 이유는 무엇입니까?](https://linux55.com/image/134706/tmux%20%EC%84%B8%EC%85%98%EC%9D%98%20%60tail%20-f%20data_log%20%7C%20grep%20%ED%82%A4%EC%9B%8C%EB%93%9C%EA%B0%80%20%ED%95%98%EB%93%9C%20%EB%94%94%EC%8A%A4%ED%81%AC%20%EC%86%8C%EB%AA%A8%EB%A5%BC%20%EC%9D%BC%EC%9C%BC%ED%82%AC%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
시나리오는 어제 API 버그를 확인해야 했던 것과 같습니다. 그래서 로그 서버에 로그인했습니다. 나중에 작업에 다시 연결할 수 있도록 tmux 세션을 열었습니다.
디버그를 입력합니다 tail -f data_log | grep keyword
. 하지만 당시에는 해결되지 않았습니다. 따라서 나중에 사용할 수 있도록 이 tmux 세션을 유지하기로 결정하고 터미널 창을 닫았습니다.
오늘 내 동료가 내 tmux 세션에 tail -f data_log | grep keyword
해당 로그 서버의 하드 드라이브가 부족하다고 말했습니다. 이로 인해 저는 부끄러움과 후회, 혼란스러움을 느꼈습니다.
as는 tail -f
자체 stdout 파일 설명자를 열고 새로 추가된 data_log 내용을 터미널 화면으로 리디렉션합니다.
이 표준 출력 파일 설명자는 무제한의 데이터를 받을 수 있습니까?
이 파일 설명자는 그렇게 많은 양의 데이터를 어디에 저장합니까? 저장할 실제 파일이 있습니까?
tmux가 이 문제와 관련이 있나요?
tmux가 이 질문과 관련이 없는 경우 실행 중인 터미널을 열고 tail -f my_log
crontab을 사용하여 my_log에 초당 1바이트를 추가하면 초당 2바이트가 내 디스크에 저장된다는 의미입니까? (tail의 경우 1, crontab 작업의 경우 1)?
답변1
가능한:
data_log
매일 많은 양의 데이터가 기록됩니다.- 아마도 를 사용하여 회전됩니다
logrotate
. 일반적인 회전 단계에는 최소한 파일 이름 바꾸기와 압축되지 않은 로그의 압축 및 삭제가 포함됩니다. tail -f
(적어도 GNU, 기타)는 기본적으로 이전 파일이 이동되거나 삭제되더라도 계속해서 읽습니다. 파일이 삭제되었지만 프로그램에 열린 파일 핸들이 있는 경우 Linux는 데이터를 디스크에 유지하고 공간을 사용할 수 없는 것으로 표시합니다.- 즉, 로그 회전으로 인해 디스크 공간이 늘어나지는 않지만 로그는 압축되고 압축되지는 않았지만 삭제된 로그가 발생합니다.둘 다공간을 차지합니다.
이 작업을 충분히 오래 수행하면 로그 회전이나 다른 사람이 로그를 수동으로 삭제하려는 시도에도 불구하고 서버 공간이 부족해질 수 있습니다.