내 서버에 여러 개의 로그 파일이 있는데 크기를 100MB로 제한하고 싶습니다. 한 달에 한 번 실행되고 각 로그 파일에서 가장 오래된 문자(맨 위에 가장 가까운)를 제거하여 각 로그 파일 크기를 100MB 이하로 만드는 cron 작업을 만들려고 합니다. 어떻게 해야 하나요?
답변1
한 달에 한 번 실행되고 각 로그 파일에서 가장 오래된 문자(맨 위에 가장 가까운)를 제거하여 100MB마다 크기를 줄이는 크론 작업을 만들려고 합니다.
이 접근 방식에는 몇 가지 문제가 있을 수 있으므로 먼저 로깅 프로세스가 제대로 작동하는지 확인하고 이 방법으로 파일을 편집할 때 로깅을 계속하세요. 파일 핸들을 열어 둔다면 이는 아마도 나쁜 생각일 것입니다.
로그를 관리하는 일반적인 방법은 을 사용하는 것입니다 logrotate
. 그러나 이 방법에는 잠재적인 문제가 있다는 점에 유의하십시오. 일부 응용 프로그램은 로그 파일 교환에 제대로 응답하지 않습니다. 시스템 로거는 실제로 이 범주에 속하며 새 로그를 다시 열려면 회전 후 신호를 받아야 합니다.
표준 출력이나 표준 오류에 기록할 수 있는 경우 프로세스 중단을 방지하기 위한 유사한 옵션은 다음을 사용하는 것입니다.파이프라인 로그. Pipelog는 프로세스와 로그 파일 사이의 중개자 역할을 하므로 어떤 것도 중단하거나 방해하지 않고 로그를 회전하거나 삭제하라는 신호를 보낼 수 있습니다.
> someprocess | pipelog someprocess.logfile &
[pipelog 5334] Using 'someprocess.logfile' as a log file.
그런 다음 파이프된 로그 SIGUSR1:을 전송하여 로그를 회전 kill -s USR1 5334
하거나 이를 삭제하고 SIGUSR2를 사용하여 새 로그를 시작할 수 있습니다.
답변2
를 사용하면 logrotate
필요에 따라 로그를 회전하고 압축합니다. 시스템에서 이미 실행 중일 가능성이 높으므로 /etc/logrotate.d에 파일을 만들어 logrotate에 로그 처리 방법을 알려주세요. 사양은 man 파일을 확인하세요.
답변3
man split
너를 도울 것이다. 특히 -b
깃발이요.