logrotate에 대한 조언을 구하고 있습니다.
최근에 SSD를 저장하기 위해 log2ram을 설치했습니다. 24GB RAM을 모두 사용하지 않기 때문에 /var/log/에 2GB를 할당했습니다. 현재 +/- 300Mb를 사용하고 있습니다.
나는 logrotate가 .gz로 끝날 수 있는 하위 디렉토리의 모든 파일을 /var/old.log/로 이동하고 하위 디렉토리 구조를 유지하기를 원합니다.
몇 가지 조사를 하고 가능한 해결책을 찾았지만 이제 질문이 떠오릅니다.
logrotate가 이러한 파일을 이동하기 위해 이 도우미 스크립트를 실행할 때(예: /var/log/file.log.2.gz를 이동한 경우) file.log를 이동하는 대신 로그를 회전할 때 새 file.log를 생성하지 않습니다. .gz. file.log.2.gz가 더 이상 존재하지 않기 때문에 2.gz를 file.log.3.gz로 변경합니다. 그런 다음 최종 스크립트는 동일한 이름으로 인해 이전 로그를 덮어씁니다.
나는 이것이 내가 원하는 것을 알고 있기 때문에 olddir 옵션을 완전히 이해하지 못합니다. 그러나 수동 상태에서는 와일드카드를 주의해서 사용해야 합니다. 도움이 필요하세요?
이렇게 하면 /var/hdd.log/의 내용을 사용하여 부팅 중에 /var/log가 생성되고, 재부팅 시 /var/hdd.log가 업데이트됩니다.
logrotate가 압축된 파일을 다른 디렉터리로 이동하여 tmpfs에 로드되지 않도록 하고 싶지만 모든 /etc/logrotate.d/* 파일을 편집하고 싶지는 않습니다.
log2ram이 시작하는 동안 /var/log를 생성하기 전에 뭔가를 넣을 수 있다고 생각했지만 어디에 있는지 모르겠습니다.
시스템은 24시간 연중무휴로 실행되며 재부팅을 최소화하려고 노력합니다. 운영 체제: 우분투 22.04 LTS
설명서가 너무 뻔할 때도 있고 모호할 때도 있습니다. 어쩌면 누군가가 내가 이해할 수 있도록 더 복잡하거나 간단한 방법으로 설명할 수 있을 것입니다.
시간 내 주셔서 감사합니다.
답변1
예,
mv
옵션 없이 명령을 사용하면 동일한 이름을 가진 모든 파일을 덮어쓰게 됩니다. 이를 방지하는 한 가지 방법은 기존 파일을 덮어쓰는 대신--backup=numbered
해당 형식으로 새 파일을 생성하는 옵션을 사용하는 것입니다.filename~*[number]*~
또 다른 옵션은 회전된 로그의 이름을 다음과 같이 바꾸는 dateext와 같은 다른 파일 명명 형식을 사용하는 것입니다.파일 이름-YYYYMMDD같은 이름의 파일을 덮어쓰는 것을 방지합니다.olddir
회전 로그를 저장해야 하는 위치입니다. logrotate 매뉴얼 페이지에서는 와일드카드 사용에 대해 경고합니다. 왜냐하면 이 옵션이 없으면 회전된 로그가 동일한 디렉터리에 저장되기 때문입니다. 와일드카드를 사용하여 logrotate에 모든 파일을 회전하도록 지시하는 경우(*
) 로그 회전에도 영향을 줍니다.시작 및 종료 시 실행될 작업을 정의하려면 cronjobs 또는 사용자 정의 작성된 init 서비스를 사용하는 것이 좋습니다. 문제 해결에 도움이 되는 예는 다음과 같습니다
logrotate
.
/var/log/**/*.log {
daily
compress
dateext
missingok
noifempty
sharedscripts
postrotate
cd /var/log && find . -type f -name '*.gz' -exec rsync -aR {} /var/old.log/ \;
endscript