Linux скрипт чистки логов

Remove log files using cron job

Hi. I want to remove all log files from the last 7 days from a folder, but leave all the other files. Can I use the below command? How do you specify that it just delete the files with .log extension?

 find /path/to/file -mtime +7 -exec rm -f <> \; 

Do I need to write this command into some file, or can I just write it in command prompt and have it run automatically every day? I have no idea how to run a cron job in linux.

8 Answers 8

Use wildcard. And just put it in your crontab use the crontab -e option to edit your crontab jobs.
See example:

* * * * * find /path/to/*.log -mtime +7 -exec rm -f <> \; 

You edit your personal crontab by running crontab -e . This gets saved to /var/spool/cron/ . The file will be the owners username, so root would be /var/spool/cron/root. Everything in the file is run as the owner of the file.

The syntax for crontab is as follows:

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr . # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 

When you are editing your own personal crontab, via crontab -e , you leave out the user-name field, because the user is inferred by the filename (see first paragraph).

That being said, your entry should look like this:

0 5 * * * find /path/to/*.log -mtime +7 -delete 

This will run every day, at 5:00 AM, system time. I don’t think you need it to run any more frequently than daily, given the fact that you are removing files that are 7 days old.

Please don’t use over use the -exec option, when the -delete option does exactly what you want to do. The exec forks a shell for every file, and is excessively wasteful on system resources.

When you are done, you can use crontab -l to list your personal crontab.

ps. The default editor on most Linux systems is vi, if you do not know vi, use something simple like nano by setting your environ variable export EDITOR=nano

Источник

Ротация логов в Linux и FreeBSD с помощью logrotate

Обновлено

Обновлено: 17.01.2022 Опубликовано: 08.06.2017

Читайте также:  Linux ssl certificate установка

С помощью утилиты logrotate можно настроить автоматическое удаление (чистку) лог-файлов. В противном случае, некоторые логи могут заполнить все дисковое пространство, что приведет к проблемам в работе операционной системы.

Установка

Чаще всего, в Linux данная утилита установлена по умолчанию. Если это не так, установка выполняется следующими командами.

Ubuntu / Debian:

CentOS / Red Hat:

Утилита не работает как служба, поэтому нет необходимости в ее запуске или перезагрузке (logrotate start или logrotate restart делать не нужно).

Настройка

Для приложение, ротация логов настраивается в отдельных файлах, расположенных по пути /etc/logrotate.d/ (во FreeBSD — /usr/local/etc/logrotate.d/).

К примеру, нам необходимо настроить ротацию лога для logstash-forwarder. Создаем файл со следующим содержимым:

/var/log/logstash-forwarder/* rotate 30
size=10M
missingok
notifempty
daily
compress
delaycompress
maxage 30
create 0644 root root
postrotate
/usr/bin/systemctl restart logstash-forwarder
endscript
>

* /var/log/logstash-forwarder/* — путь к файлу, который нужно ротировать. * указывает, что нужно чистить все файлы, которые расположены в каталоге /var/log/logstash-forwarder.
** имейте в виду, что во FreeBSD, путь может быть /usr/local/etc/logrotate.d/logstash.

При настройке необходимо проверять работу сервиса после ротации лога. Некоторые службы могут перестать работать без лог-файла. В данном случае, необходимо создавать новый (create). Также, в некоторых случаях, сервис необходимо перезапускать, так как при создании нового файла меняется его дескриптор.

Описание опций

Для описания ротации мы можем использовать следующие директивы:

Параметр Описание
rotate N Хранить последние N ротированных файлов. Остальные удалять.
maxage N Хранить ротированные файлы за последние N дней. Остальные удалять.
copytruncate Сначала создается копия файла лога, после уже обрезается действующий. Это может понадобиться в случаях, когда программа должна писать лог непрерывно. Но существует 2 очевидных минуса: долгое выполнение при больших объемах и возможность потерять небольшое число записей, если из запись придется на процесс усечения.
size=xM Пока размер лог-файла не превысит x мегабайт, он не будет ротироваться.
missingok Если файла не существует, не выкидывать ошибку.
notifempty Если файл пустой, не выполнять никаких действий.
daily Делать ротацию каждый день.
weekly Делать ротацию каждую неделю.
monthly Делать ротацию каждый месяц.
compress Сжимать ротированные файлы.
delaycompress Сжимать только предыдущий журнал. Позволяет избежать ошибок, связанных с отсутствием доступа к используемому файлу.
create 0644 root root Создать новый лог-файл после ротирования с конкретными правами 0644 и владельцем root (меняем значения на нужные). Можно указать без прав (просто create), тогда права будут назначены по умолчанию для пользователя, под которым запускается ротация.
su root root Под какими пользователем и группой выполнять ротацию. В данном примере root (необходимо поменять на нужные).
prerotate . endscript Скрипт, который необходимо выполнить перед чисткой лога.
postrotate . endscript Скрипт, который необходимо выполнить после чистки лога.
sharedscripts Если мы указали выполнить ротацию для нескольких файлов (например, при помощи *), скрипт prerotate/postrotate будет выполняться для каждого из них. Данная опция указывает, что скрипт нужно выполнить один раз после завершения ротации всех файлов.

Запуск

Мы можем разово запустить ротацию, а также настроить автозапуск.

Читайте также:  Linux kubuntu 64 bit

Вручную

Запуск выполняется со следующим синтаксисом:

Источник

Script To Delete Log Files in Linux

Computer How To

In this article I will show very basic shell Script to Delete Log Files in Linux and schedule logs deletion using a cron.

Linux Log Files

The Linux operating system and running applications constantly generate various types of messages that are logged in various log files.
Logging is the main source of information about the operation of the system and its errors.
Most of the log files are contained in the /var/log directory.

Shell Script To Delete Log Files in Linux

Step 1

Lets create directory where we will store our script file.

Step 2

Create new shell script file and make it executable:

$ cd script $ touch delete_logs.sh $ chmod +x delete_logs.sh

Step 3

In my case I need delete all tx_proxy1.log, tx_proxy2.log, tx_proxy3.log…, log files, so I have selected only these files: *proxy*.log.

Linux log files

Edit the delete_logs.sh file with your favorite text editor and paste text below into that file:

# Linux script to delete Log files weekly #!/bin/sh sudo rm -rf /var/log/*proxy*.log

Step 4

Now we need create cronjob for execute our delete_logs.sh script.
This cron job will executed once a week at 00:00 on Sunday (0 0 * * 0).

every 5th minute: */5 * * * *
every 15th minute: */15 * * * *
every 60th minute: 0 * * * *

BTW, you can use quick and simple editor for editing cron schedule expressions – crontab guru.

To edit crontab file run:

0 0 * * 0 /bin/sh /root/script/delete_logs.sh

Now cronjob will execute delete_logs.sh script every week:

Conclusion

Yo just learned how to write basic Linux shell script for delete Log files. And make it executable.

Also how to run that script as a cron job.

If you like what you are reading, please:

Share this:

Источник

Deleting Old Files With BASH / Removing Old Log Files with BASH (Linux)

Log files are a brilliant feature of any piece of software / operating system. However, over time they can take up space and become a pain to remove. In this blog post I am going to look at a quick bash script that can be used via cron to delete older log files.

The Set Up

In this scenario I have a folder (/home/pi/test/) where one of my programs writes regular log files to. When the log file reaches a certain size (e.g. 100MB) it generates a new log file (sequentially numbered). The scenario could also be that the log file is generated daily.

geektechstuff_99_log_files

For this scenario I created the .log files using the Linux touch command:

geektechstuff_touch_to_create_99_files

As I want to delete files that are old (i.e. not created today) I had a few options.

  • Wait several days to test my bash script.
  • Change the systems date/time to the future.
  • Use touch to modify the files.

I took the option of using the touch command to change the files named 1.log through 55.log.

touch -a -m -t 202004011220.01 .log

This command tells touch to:

Читайте также:  Установить драйвер звуковой карты linux

-m is the modification time

-t tells touch that I want to provide a specific date/time which is in the format:

Note: YYYY in this case is DECADE-INDIVIDUAL_YEAR-CENTURY-CENTURY, so 1982 would be 8219.

With that in mind 202004011220.01 becomes 1st April 2020 at 12:20 (and 1 second).

touch -a -m -t 202004011220.01 </p data-lazy-src=

Breaking the bash script down:

A she-bang line to tell the operating system what to use to run the script

The folder path where the log files are. I thought best to hard code this here so that it is not accidentally mistyped at run time.

log_of_files=/home/pi/files_deleted.log

The location of where I want my script to log what it has done.

date >> $log_of_files echo "---" >> $log_of_files

Outputting the systems current date/time and then a line of hyphens into the log file.

find $folder_path -mtime +31 -name "*.log" >> $log_of_files

Outputs the files that the find command finds to the log file. These will be the files that bash script will delete.

-mtime is the files modification time. In this case I’m asking for anything greater than 31 days.

-name is the files name. In this case I am asking for any file names that end .log

find $folder_path -mtime +31 -name "*.log" -delete

This line is very similar to the above, but instead of outputting the list of files to the log file it deletes them (-delete).

Adds another line of hyphens to the log file.

Modifying Run Permissions And Scheduling

Once created and tested, the file can be made executable and set to run at certain times on certain dates:

Published by Geek_Dude

I’m a tech enthusiast that enjoys science, science fiction, comics and video games — pretty much anything geeky. View all posts by Geek_Dude

Top Posts & Pages

Источник

Оцените статью
Adblock
detector