Nginxログファイルをローテーションする最良の方法は何ですか?私の意見では、/ etc/logrotate.d /にファイル「nginx」を作成し、次のコードを入力して、その後/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
}
/ usr/local/nginx/logs /にaccess.logファイルとerror.logファイルの両方があり、両方を毎日ローテーションしたいと考えています。 「dateext」が正しいかどうか誰か教えてもらえますか?ログファイル名を「access.log-2010-12-04」のようにします。もう1つ:毎日特定の時間(午後11時など)にログローテーションを実行できますか?もしそうなら、どのように?ありがとう。
すべてのvhostを一度にローテーションできます。
/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
...
もう1つ:毎日特定の時間(午後11時など)にログローテーションを実行できますか?
デフォルトでは、logrotateは午前4時にcron経由で実行されます。
/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
dateext
の値はdateformat
ディレクティブによって指定され、デフォルトは%Y%m%d
(年、月、日)です。 %Y-%m-%d
のようにカスタマイズできます。
すでにlogrotate
がインストールされて機能している場合は、毎日cron
ジョブとして実行されている可能性があります。時間を変更するには、それを見つける必要があります(たとえば、 anacron
の使用法かどうか。ただし、システムごとに異なります)。
Cronologをチェックしてください http://cronolog.org/ これはあなたが必要とすることをするはずです