Гайд Автоматическое удаление логов через crontab

FIELD LINE

Администратор
Регистрация
11 Июн 2017
Сообщения
47
Симпатии
38
Пол
Мужской
#1
В данной статье рассмотрим возможность автоматического удаления логов из нужных директорий на вашем vds или выделенном Linux сервере.

Допустим, вы хотите что бы раз в сутки удалялись все логи у определенного пользователя, а в нужных каталогах назначались рекурсивные права на запись от нужного пользователя. Можно сделать так, что бы это происходило автоматически раз в сутки.

В примере показано как чистить все логи на сервере из папки /home/ у пользователя user ровно раз в сутки.
Получается, что данный пример показывает как чистить логи в нужных директории в /home/user/, а если точнее, то у пользователя user

Допустим, у пользователя user имеется 2 сервера hlds и еще что то в каталоге. У первого сервера имя каталога hlds1, у второго сервера имя каталога hlds2.

Настройка:
1)
Создайте в папке /home/user/ файл remove_logs.sh
Это можно сделать командой nano /home/user/remove_logs.sh
2) Вставьте туда следующее содержимое:
Код:
echo sheduled task [`date`]: Clearing game logs > /dev/kmsg
find /home/user -type f -name "*.log" -delete
chown -R user:user /home/user/hlds1/
chown -R user:user /home/user/hlds2/
3) Назначьте права на скрипт:
Код:
chmod +x remove_logs.sh
4) Сохраняйте изменения.

Вопрос: Что такое chown -R user:user ?
Ответ:
Это рекурсивное назначение прав определенного пользователя на файлы и каталоги. В данном случае на 2 каталога hlds1 и hlds2 назначаются рекурсивные права от пользователя user.

Теперь все логи будут удаляться у данного пользователя, а на указанные каталоги hlds1 и hlds2 будут назначаться рекурсивно права от пользователя, что бы права записи не сбились, так как директории постоянно исполняемы. Далее перейдем к процессу автоматизации.

Как добавить задачу в cron, что бы раз в в сутки выполнялись указанные операции в скрипте remove_logs.sh?
Настройка crontab:
1) Введите в терминал команду nano /etc/crontab
2) Вставьте туда следующее в самый конец:
Код:
59 23 * * * root /home/user/remove_logs.sh
3) Сохраняйте изменения.

Теперь у пользователя user чистятся все логи ровно раз в сутки в 23:59:01 , а на файлы игровых серверов данного пользователя назначаются рекурсивные права записи. На этом установка закончена.

Проверить работу можно командой dmesg в терминале. Вы увидите примерно следующее содержимое:
Код:
sheduled task [Вс ноя 19 23:59:01 MSK 2017]: Clearing game logs
Приятной работы.
 

Molodoi

Команда форума
Модератор
Регистрация
14 Июн 2017
Сообщения
512
Симпатии
92
#2
А можно ли задавать время чистки например раз в неделю и как?
 

FIELD LINE

Администратор
Регистрация
11 Июн 2017
Сообщения
47
Симпатии
38
Пол
Мужской
#3
А можно ли задавать время чистки например раз в неделю и как?
Конечно. В правиле cron назначьте нужный вам временной интервал. В примере данной статьи я привел в пример задание на раз в сутки.
 

neygomon

Его Темнейшество :j
Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
806
Симпатии
376
Пол
Мужской
#7
fantom, зачем что-то доустанавливать, если встроенные тулзы по типу find работают изумительно?
 

fantom

Пользователь
Регистрация
11 Июн 2017
Сообщения
202
Симпатии
116
Пол
Мужской
#8
fantom, зачем что-то доустанавливать, если встроенные тулзы по типу find работают изумительно?
ну имхо с find велосипед, в то время как logrotate тулза изначально предназначенная для этих целей. Хотя нужно еще потанцевать над тем что файлы логов разделены по датам. В то время как logrotate отлично работает с одним файлом. Но я таким не заморачивался ибо амхх логы в файл были отклчючены, а запуск сервера происходил через supervisor в конфиге которого есть опция куда перенаправлять stdout/stderr. А также есть встроенная ротация логов. Таким образом я получил лог в один файл с ротацией по 10 Мб каждый 10 файлов
 

Fire

Администратор
Модератор
Регистрация
12 Сен 2017
Сообщения
40
Симпатии
39
#9
В том то и дело, что он заточен под одиночные лог-файлы.
 

Portugal

Пользователь
Регистрация
2 Мар 2018
Сообщения
202
Симпатии
3
Пол
Мужской
#10
Правельно ли я отредактировал под себя ? сервер у меня находится по пути /home/sharkyzz/masofkepb или надо ещё вместо user:user заменить на sharkyzz:sharkyzz .??

echo sheduled task [`date`]: Clearing game logs > /dev/kmsg
find /home/sharkyzz -type f -name "*.log" -delete
chown -R user:user /home/sharkyzz/masofkepb/