Я обычно не делаю таких вещей, поэтому мне просто нужно спросить. Как мне создать сценарий, который проверяет файл журнала, скажем, с именем log.txt, захватывает все, кроме первых 100 000 строк, в новый файл log.txt и удаляет старый файл log.txt? Его также нужно будет запускать ежемесячно.
Пока с нулевым знанием кодирования мне удалось создать скрипт, который будет удалять log.txt один раз в месяц (новый генерируется автоматически), но я бы очень хотел сохранить данные, кроме самых старых 100 000 записей, как указано ниже. .
Вот старый сценарий
#!/bin/sh
find /mnt/usb_storage/ -type f -name "log.txt" -exec rm -r {} \;
как я это реализовал:
# cd /privRoot
# chmod 755 deleteLogMonthly.sh
# crontab -e
59 23 1 * * deleteLogMonthly.sh
Вы пытаетесь изобретать колеса.
Logrotate делает это эффективно:
https://www.linode.com/docs/uptime/logs/use-logrotate-to-manage-log-files
http://www.rackspace.com/knowledge_center/article/understanding-logrotate-utility
Вместо жестких 100К строк вы даете ему временной интервал, и он начнет записывать в новый файл журнала с этого периода, сохраняя старый.
Если по какой-то странной причине logrotate не подходит, посмотрите Cronolog:
Есть ли альтернатива logrotate для журналов apache?
http://linux.die.net/man/1/cronolog
Или действительно вручную создайте сценарий bash, подобный этому:
Это все еще основано на днях, но вы можете добавить туда подсчет строк.
Добавьте следующее в конфигурацию logrotate (новый файл в /etc/logrotate.d/)
/mnt/usb_storage/log.txt {
rotate 5 # Change this to number of files you need to preserve
monthly
prerotate
/usr/bin/sed -e '1,100000d' < /mnt/usb_storage/log.txt
endscript
postrotate
<some another action>
endscript
}
вы можете проверить это, используя logrotate -d /etc/logrotate.d/mylogrotate.conf
(при условии, что вы создали этот файл)
поищите справочную страницу "logrotate" или сделайте это самостоятельно с помощью сценария оболочки. в этом нет никакой магии. если вы знаете, как сделать это вручную, просто поместите все это в текстовый файл, и он у вас есть.
также ознакомьтесь со страницей руководства по инструменту "tail". он предназначен для отображения «хвоста» или, точнее, последних X строк файла. "хвост человека" дает больше информации о том, как его использовать.