- Remove log files using cron job
- 8 Answers 8
- Ротация логов в Linux и FreeBSD с помощью logrotate
- Установка
- Настройка
- Описание опций
- Запуск
- Вручную
- Script To Delete Log Files in Linux
- Linux Log Files
- Shell Script To Delete Log Files in Linux
- Step 1
- Step 2
- Step 3
- Step 4
- Conclusion
- If you like what you are reading, please:
- Share this:
- Deleting Old Files With BASH / Removing Old Log Files with BASH (Linux)
- The Set Up
- Modifying Run Permissions And Scheduling
- Related
- Published by Geek_Dude
- Search
- Top Posts & Pages
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
С помощью утилиты 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 будет выполняться для каждого из них. Данная опция указывает, что скрипт нужно выполнить один раз после завершения ротации всех файлов. |
Запуск
Мы можем разово запустить ротацию, а также настроить автозапуск.
Вручную
Запуск выполняется со следующим синтаксисом:
Script To Delete Log Files in Linux
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.
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.
For this scenario I created the .log files using the Linux touch command:
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:
-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).