Как лучше всего повернуть файлы журнала nginx? На мой взгляд, я должен создать файл "nginx" в /etc/logrotate.d/, заполнить его следующим кодом и после этого перезапустить /etc/init.d/syslog.
Это будет моя конфигурация (я ее еще не тестировал):
/usr/local/nginx/logs/*.log {
#rotate the logfile(s) daily
daily
# adds extension like YYYYMMDD instead of simply adding a number
dateext
# If log file is missing, go on to next one without issuing an error msg
missingok
# Save logfiles for the last 49 days
rotate 49
# Old versions of log files are compressed with gzip
compress
# Postpone compression of the previous log file to the next rotation cycle
delaycompress
# Do not rotate the log if it is empty
notifempty
# create mode owner group
create 644 nginx nginx
#after logfile is rotated and nginx.pid exists, send the USR1 signal
postrotate
[ ! -f /usr/local/nginx/logs/nginx.pid ] || kill -USR1 `cat
/usr/local/nginx/logs/nginx.pid`
endscript
}
У меня есть файлы access.log и error.log в / usr / local / nginx / logs /, и я хочу, чтобы оба они менялись ежедневно. Кто-нибудь может сказать мне, правильно ли "dateext"? Я хочу, чтобы имя файла журнала было чем-то вроде «access.log-2010-12-04». Еще одна вещь: могу ли я производить ротацию журнала каждый день в определенное время (например, в 23:00)? Если да, то как? Спасибо.
Вы можете повернуть сразу все хосты:
/var/www/vhosts/*/logs/*.log { ... }
man logrotate
dateformat format_string
Specify the extension for dateext using the notation similar to strftime(3) function. Only %Y %m
%d and %s specifiers are allowed. The default value is -%Y%m%d. Note that also the character sep‐
arating log name from the extension is part of the dateformat string. The system clock must be set
past Sep 9th 2001 for %s to work correctly. Note that the datestamps generated by this format
must be lexically sortable (i.e., first the year, then the month then the day. e.g., 2001/12/01 is
ok, but 01/12/2001 is not, since 01/11/2002 would sort lower while it is later). This is because
when using the rotate option, logrotate sorts all rotated filenames to find out which logfiles are
older and should be removed.
Кто-нибудь может сказать мне, правильно ли "dateext"? Я хочу, чтобы имя файла журнала было чем-то вроде «access.log-2010-12-04».
Вставить dateformat
директиву в ваш файл конфигурации, примерно так:
/usr/local/nginx/logs/*.log {
daily
dateext
dateformat -%Y-%m-%d
...
Еще одна вещь: могу ли я производить ротацию журнала каждый день в определенное время (например, в 23:00)?
По умолчанию logrotate запускается через cron в 4 утра:
/etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Вы можете переместить этот файл куда-нибудь и переименовать в logrotate.sh
, затем создайте новый файл в /etc/cron.d/
как показано ниже:
0 23 * * * root /path/to/logrotate.sh
Посмотрите хронолог, http://cronolog.org/ Это должно делать то, что вам нужно
Значение для dateext
дается dateformat
директива и по умолчанию %Y%m%d
(год, месяц и день месяца). Вы можете настроить это как %Y-%m-%d
.
Если у вас уже есть logrotate
установлен и работает, вероятно, он работает каждый день как cron
работу, вам просто нужно найти ее, чтобы изменить время (помните, что на это влияют другие вещи, например, использование или нет anacron
, но это зависит от каждой системы).