- Автор темы
- Администратор
- Модер.
- Команда форума
- #1
Код:
# cat /etc/crontab | grep log
# Rotate log files every hour, if necessary.
0 * * * * root newsyslog
Код:
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/all.log 600 7 * @T00 J
/var/log/amd.log 644 7 100 * J
/var/log/auth.log 600 7 100 * JC
Тут:
logfilename – обязательный параметр, полный путь к файлу лога, который необходимо проверять;
owner:group – необязательный параметр, владелец/группа, которой принадлежит файл;
mode – права доступа к файлу;
count – сколько копий заархивированных файлов хранить;
size – предельный размер файла лога в килобайтах, после которого он будет заархивирован и создан новый, для указания “любой размер” – установите *;
when – время в часах, через которое файл будет заархивирован, даже если его размер не превысил заданный в size, что бы игнорировать опцию – установите *;
flags – флаги:
- B – по умолчанию, newsyslog добавляет в новый лог-файл сообщение о том, что лог-файл был ротирован, но если лог-файл бинарный, то это сообщение испортит лог, с параметром B newsyslog не будет добавлять никаких сообщений в лог;
- C – если лог-файл не существует, то его необходимо создать;
- G – если указан данный флаг, то в названии лог-файла можно использовать стандартные шаблоны (например *);
- J – сжимать лог-файл, используя bzip2;
- N – не предупреждать никакой процесс, о ротации лог-файла;
- W – если используются флаги Z или J, то newsyslog должен подождать, пока завершится процесс архивации;
- Z – сжимать лог, используя gzip.
Далее:
[/pid_file] – необязательный параметр, определяющий путь к файлу, в котором хранится PID процесса приложения, работающего с данным логом. Если он указан, то приложение будет оповещено о ротации посылкой сигнала, на что оно должно произвести соответствующие действия со своей стороны;
[sig_num] – необязательный параметр, определяющий номер сигнала, посылаемый приложению при ротации, чтобы произошло переоткрытие нового лог-файла для записи. По умолчанию используется SIGHUP, т. е. «1» (в обычных случаях посылается с помощью kill -1 или kill -HUP). Некоторые демоны для переоткрытия лог-файлов требуют другого номера сигнала, как например, для nginx, php-fpm, sphinx нужен SIGUSR1, т. е. «30».
Теперь – добавим новую запись в настройку newsyslog.
Сначала – создадим файл, который будет ротироваться:
Код:
# touch /var/log/somesite.access.log
Установим ему размер в 10Кб:
Код:
# truncate -s 10240 /var/log/somesite.access.log
Код:
# ls -hl /var/log/somesite.access.log
-rw-r--r-- 1 root wheel 10k Feb 1 12:55 /var/log/somesite.access.log
Теперь – добавляем новую строку в файл /etc/newsyslog.conf:
Код:
/var/log/somesite.access.log 600 7 1 * ZC
Запустим newsyslog с ключём -n – в таком случае он не будет выполнять ротацию, а только отобразит – какие действия будут выполнены:
Код:
# newsyslog -n
/var/log/somesite.access.log <7Z>: trimming
rm -f /var/log/somesite.access.log.7
rm -f /var/log/somesite.access.log.7.gz
rm -f /var/log/somesite.access.log.7.bz2
rm -f /var/log/somesite.access.log.7.xz
ln /var/log/somesite.access.log /var/log/somesite.access.log.0
chmod 600 /var/log/somesite.access.log.0
Start new log...
mktemp /var/log/somesite.access.log.zXXXXXX
chmod 600 /var/log/somesite.access.log.zXXXXXX
mv /var/log/somesite.access.log.zXXXXXX /var/log/somesite.access.log
Signal all daemon process(es)...
kill -1 64569 # /var/run/syslog.pid
sleep 10
Compress all rotated log file(s)...
gzip /var/log/somesite.access.log.0
chmod 600 /var/log/somesite.access.log.0.gz
И запустим newsyslog с ключём -v для подробного режима:
Код:
# newsyslog -v
Processing /etc/newsyslog.conf
/var/log/all.log <7J>: does not exist, skipped.
/var/log/amd.log <7J>: does not exist, skipped.
/var/log/auth.log <7J>: size (Kb): 32 [100] --> skipping
...
/var/log/somesite.access.log <7Z>: size (Kb): 10 [1] --> trimming log....
Signal all daemon process(es)...
Notified daemon pid 64569 = /var/run/syslog.pid
Pause 10 seconds to allow daemon(s) to close log file(s)
Compress all rotated log file(s)...
Посмотрим на файл теперь:
Код:
# ls -hl /var/log/ | grep somesite
-rw------- 1 root wheel 74B Feb 1 13:00 somesite.access.log
-rw------- 1 root wheel 148B Feb 1 13:00 somesite.access.log.0
-rw------- 1 root wheel 144B Feb 1 12:58 somesite.access.log.1.gz