쉘 스크립트 레벨에서 파일 크기 (stdout)를 제한하는 쉬운 방법?


10

좋아, 이것은 내 관점에서 매우 실용적인 사용 사례입니다.

출력을 파일에 기록하는 간단한 쉘 oneliner가 있다고 가정 해 봅시다. 이것은 단순히 tcpdump와 같은 무엇이든 될 수 있습니다. 출력 파일이 주어진 크기를 초과하지 않도록 일반적이고 사소한 방법이 있습니까?

이 문제의 배후는 실수로 마운트 포인트의 전체 사용 가능한 공간을 채우지 않도록하는 것입니다. 스크립트를 잊어 버렸거나 시간당 GB의 데이터가 생성되면이 간단한 디버깅 작업으로 인해 시스템이 손상 될 수 있습니다.

이제 일부 도구 (tcpdump의 -W / -C 조합)에 빌드되는 옵션을 알고 있습니다. 내가 필요한 것은 매우 일반적인 안전 장치입니다.

간단히 말해-다음과 같은 스크립트를 실행할 때 :

% this -is --my=very|awsome|script >> /var/tmp/output.log

output.log가 1GB보다 커지지 않도록하는 방법

스크립트가 충돌하거나 죽이거나 그 밖의 것이 발생할 수 있습니다.

해결책 우분투 / 데비안 / 페도라와 같은 인기있는 배포판에서만 사용할 수있는 도구 만 사용하여 쉽고 간단해야합니다. 일반적으로 널리 이용 가능한 것. 언어 / 기술에 관계없이 복잡한 여러 줄 프로그램은 옵션이 아닙니다.

답변:


16

head이것을 위해 사용할 수 있습니다 :

command | head -c 1G > /var/tmp/output.log

K, M, G 등을 접미사로 허용합니다 (바이트가 기본값 임). 기본 10 버전을 사용하려면 'B'를 추가하십시오.


다시 머리 벽 더 간단하지 못했습니다. 감사!
mdrozdziel 2016 년

2
tail -c 1G이벤트의 꼬리를 보는 것이 유용한 것처럼 보입니다 . 당연히 명령이 끝난 후에 플러시됩니다.
dashesy

Mac OS에서는 접미사 단위가 작동하지 않습니다.
anumi

0

이 스크립트를 실행하는 데만 사용되는 사용자의 최대 파일 크기를 설정하십시오.

파일 /etc/security/limits은 특정 사용자에 대한 명시적인 값이 없으면 "default"값으로 사용자를 제한합니다. 이 사용자 별 값은 기본값을 덮어 씁니다. 운영 체제에 따라 파일 이름이 약간 다를 수 있습니다.

로그 사용자의 이름이 log_maker 인 경우 파일에 다음 행을 추가하십시오.

log_maker hard fsize 1000000

fsize 뒤의 숫자는 최대 파일 크기 (KB)입니다.



0

당신은 어떤 파일을 제한 할 수 있습니다

tail -c 1G myLog.log > myLog.tmp
mv myLog.tmp > myLog.log

꼬리를 같은 파일에 직접 쓰면 빈 파일이됩니다. 따라서 임시 파일을 사용해야합니다.


tail -c 1G myLog.log> myLog.tmp mv myLog.tmp> myLog.log 로그를 죽일 것입니다.> 대신 >>를 사용하고 싶습니까?
djdomi

이 명령의 목적은 마지막 1G만으로 로그를 다시 작성하는 것입니다. >>는 이전 명령이어야합니다. doSomething >> myLog.log; tail -c 1G myLog.log> myLog.tmp; mv myLog.tmp> myLog.log;
Séverin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.