Мне нужно сжать и удалить файлы журнала через некоторое время с сервера. Раньше я никогда не писал скриптов. Пока у меня есть сценарий logs.sh
:
#!/bin/bash
LOGS=/usr/local/jboss/server/default/log/
INFOLOG="server.log"
ERRORLOG="error.log"
BOOTLOG="boot.log"
# gzip files last modify at least 7 days ago, and not files that are identified above and that have already been compressed
find $LOGS -mtime +7 -not -name "$INFOLOG" -not -name "$ERRORLOG" -not -name "$BOOTLOG" -not -name '*.gz' -exec gzip "{}" \;
# remove all logs older than 90 days
find $LOGS -mtime +90 -not -name "$INFOLOG" -not -name "$ERRORLOG" -not -name "$BOOTLOG" -print0 | xargs -0 -I xxx rm xxx
и я использую cron для этого каждые 5 минут после 1 часа ночи с jboss-logs.sh
5 1 * * * /usr/local/jboss/server/default/logs.sh
и добавьте cron с помощью crontab /root/jboss-logs.sh
Это правильно? будет ли он сжимать файлы старше 7 дней и удалять файлы старше 90? Будет ли работать? Это безопасно - особенно удаление?
Использовать logrotate
повернуть бревна.
В /etc/logrotate.d/ вы найдете несколько уже установленных шаблонов поворота.
По сути, вы определяете шаблон для ежедневной обработки файлов.
Logrotate запускается cron.daily.
Использовать man logrotate
чтобы узнать больше о простом синтаксисе на основе строк.
newsyslog.conf
содержит именно то, что вам нужно.
newsyslog
периодически проверять файлы и вращать / сжимать / удалять файлы. Также newsyslog
может отправлять сигналы процессам, которые инициируют повторное открытие файлов журнала.