Skip to content

Posts tagged ‘cron’

21
Июл

Находим и удаляем старые файлы в Unix и Linux

Допустим у вас есть папочка с бекапами или архивами, и некоторые из них уже совсем устарели и больше не нужны. В поиска и удаления таких архивов/файлов используем find и cron.

Добавляем в cron следующую строчку:

00 20 * * * /usr/bin/find /home/backup/ -name "*.gz" -mtime +8 -delete

Итак расшифровка – Утилита cron, каждый день в 20:00 запускает find, который в свою очередь ищет в папке /home/backup, файлы с окончанием на  .gz, кторые старше 8 дней на момент запуска крона и в случае нахождения удаляет их.

Доступный список ключей

  • -size -  размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).
  • -atime – время последнего обращения к файлу.
  • -ctime – время последнего изменения владельца или прав доступа к файлу.
  • -mtime – время последнего изменения файла (исчесляется в днях)
  • -newer -  искать файлы созданные позже указанной даты
  • -mmin – время последнего изменения файла (исчесляется в минутах)

При написании статьи часть материала взята с Вики.

5
Авг

Ротация логов в Linux

Cегодня я хотел бы рассказать о ротации лог-файлов для веб-сервера Apache, либо любой другой службы которая создает логи и которые необходимо ротировать.

Начну с настройки на Линуксе, а именно на ОС Slackware (в RedHat и CentOS аналогично). Ротацию логов я буду осуществлять с помощью logrotate, конфигурационный файл которого расположен в:

# /etc/logrotate.conf

Итак открываем файл logrotate.conf любым редактором и вставляем следующие строки:

/var/log/apache/error_log (полный путь для лог-файла)
(в CentOS это /var/log/httpd/error_log)
{
rotate 5 (кол-во хранимых сжатых фрагментов)
size=10M (максимальный размер несжатого файла (в мегабайтах).
Пока размер текущего файла журнала не превысит данный порог,
файл не будет "ротирован")

missingok (отсутствие файла не является ошибкой)
nocopytruncate (не сбрасывать файл журнала после копирования)
nocreate (не создавать пустой журнал)
nodelaycompress (не откладывать сжатие файла на следующий цикл)
nomail (не отправлять содержимое удаляемых журналов по почте)
notifempty (не обрабатывать пустые файлы)
noolddir (держать все файлы в одном и том же каталоге)
compress (сжимать ротируемые фыйлы)
postrotate
/usr/bin/killall  -HUP  httpd
endscript (между postrotate и endscript расположены команды
интерпретатора исполняемые непосредственно после ротации.
В данном случае сюда помещена команда killall,
перезапускающая httpd-сервер.
Это необходимо для нормальной процедуры ротации лог-файлов)
}
/var/log/apache/access_log (полный путь для лог-файла)
(в CentOS это /var/log/httpd/access_log)
{
rotate 4

weekly (производить ротацию регулярно, раз в неделю)
missingok
nocopytruncate
nocreate
nodelaycompress

nomail
notifempty
noolddir
compress
postrotate
/usr/bin/killall -HUP httpd
endscript
}

Как вы можете видеть в блоке где происходит ротация error_log, момент ротации наступает по достижению размера в 5 Мегабайт. Напротив, в блоке access_log ротация будет происходить раз в  неделю, либо если раз в месяц (вместо weekly, ставим – monthly).

Ротация файлов может происходить как вручную с помощью команды:

# /usr/sbin/logrotate –s /var/log/logrotate.state /etc/logrotate.conf

Либо с помощью планировщика заданий Cron:
* 22 * * * /usr/sbin/logrotate –s /var/log/logrotate.state /etc/logrotate.conf
На этом все, но продолжение как всегда следует…

PS

Для ротации файла maillog, вместо /usr/bin/killall -HUP httpd – пишем

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true