Назад | Перейти на главную страницу

Как сделать cron-скрипт для очистки лог-файла?

Я обычно не делаю таких вещей, поэтому мне просто нужно спросить. Как мне создать сценарий, который проверяет файл журнала, скажем, с именем 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

https://www.digitalocean.com/community/tutorials/how-to-configure-logging-and-log-rotation-in-apache-on-an-ubuntu-vps

Вместо жестких 100К строк вы даете ему временной интервал, и он начнет записывать в новый файл журнала с этого периода, сохраняя старый.

Если по какой-то странной причине logrotate не подходит, посмотрите Cronolog:

Есть ли альтернатива logrotate для журналов apache?

http://linux.die.net/man/1/cronolog

Или действительно вручную создайте сценарий bash, подобный этому:

http://www.paperstreetonline.com/2014/12/09/bash-script-an-alternative-to-logrotate-d-to-rotate-asterisk-log-files/

Это все еще основано на днях, но вы можете добавить туда подсчет строк.

Добавьте следующее в конфигурацию 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 строк файла. "хвост человека" дает больше информации о том, как его использовать.