내 sip 서버는 매시간 3개의 로그 파일을 생성합니다.
Progress-23May2017-10-00hrs.log Call-23May2017-10-00hrs.log Error-23May2017-10-00hrs.log
따라서 현재 시간 로그를 제외한 다른 모든 로그 파일을 삭제해야 합니다. 이 명령을 사용해 보았습니다.
find . -type f -name "*-23May2017-10-00hrs.log" -print
현재 시간에 대한 세 개의 로그 파일을 인쇄합니다.
따라서 이 명령을 시도하여 파일이 현재 시간 로그와 일치하지 않는지 확인합니다.
find . -type f -name "!(*-23May2017-10-30hrs.log)" -print
그것은 나에게 아무것도주지 않습니다.
다른 로그 파일을 어떻게 삭제하나요?
답변1
find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm
답변2
첫째: 조회가 이스케이프되지 않으므로 와일드카드가 *
변환됩니다. 이를 방지하려면 백슬래시를 사용 \
하거나 작은따옴표를 사용할 수 있습니다.'
그래서:
find . -type f -name '*-23May2017-10-00hrs.log' -print
잘 작동할 것입니다.
실제 문제로 돌아가서 이 문제를 해결하는 방법에는 여러 가지가 있습니다. 첫째, find -mtime
기능을 사용하여 x분 전에 마지막으로 수정된 모든 파일을 수신할 수 있습니다. SIP 서버가 로그인되어 있다고 가정/var/log/sip/
find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print
24*60분(1일) 전에 마지막 으로 수정된 및로 끝나는 모든 파일이 .log
표시됩니다.
그러나 로그 처리를 위한 도구를 사용할 수도 있으며 그게 전부입니다 logrotate
.
logrotate는 모든 주요 UNIX 배포판에서 사용할 수 있으며 파일을 한 번에 압축하고 다른 파일보다 먼저 삭제하는 등의 작업을 수행할 수 있습니다. 기능 목록이 길다. 설치가 쉽고 데몬으로 실행되며 추가 cronjob을 다룰 필요가 없습니다.
내 제안은 logrotate를 사용하는 것입니다. 그 단순함을 보세요:https://linux.die.net/man/8/logrotate