Мой 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
должно работать нормально.
Возвращаясь к вашим реальным вопросам: есть несколько способов решить эту проблему. Во-первых, вы можете использовать -mtime
функцию find, чтобы просто прослушать каждый файл, последняя модификация которого произошла x минут назад. Предположим, что ваш sip-сервер регистрирует данные в/var/log/sip/
find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print
покажет вам все файлы, заканчивающиеся на .log
, и последний раз измененные 24*60 минут (1 день) назад.
Однако вы также можете использовать инструмент, который создан для обработки журналов, и это logrotate
.
logrotate доступен во всех основных дистрибутивах unix и позволяет сжимать файлы определенного возраста, удалять их в другой возраст и т. д. Список функций довольно длинный. Он прост в установке, работает как демон, и вам не нужно возиться с дополнительными cronjobs.
Мои предложения — использовать logrotate. Проверьте его простоту на:https://linux.die.net/man/8/logrotate