logrotate 的設定翻譯

logrotate 是一個自動分割、打包檔案的工具

log檔案會隨著時間日益增大

不止不好查看

大到一個程度寫入Log效能也會變差

所以需要 logrotate 來幫忙分割打包壓縮處理

有鑒於網路上都是分享自己的設定

並沒有一個很全面的說明

所以我就把 man logrotate 的設定翻譯一下

compress

Old versions of log files are compressed with gzip(1) by default. See also nocompress.

compresscmd

Specifies which command to use to compress log files. The default is gzip. See also compress.

預設會把舊的log檔案做壓縮,也可指定壓縮的工具指令,若不壓縮可用 nocompress

uncompresscmd

Specifies which command to use to uncompress log files. The default is gunzip.

解壓縮,預設是用 gunzip

compressext

Specifies which extension to use on compressed logfiles, if compression is enabled. The default follows that of the configured compression
command.

設定壓縮後檔案的副檔名,預設會根據壓縮指令給副檔名

compressoptions

Command line options may be passed to the compression program, if one is in use. The default, for gzip(1), is "-6" (biased towards high
compression at the expense of speed). If you use a different compression command, you may need to change the compressoptions to match.

壓縮選項

可以設定壓縮指令所需的選項

預設用的gzip給的壓縮等級是6

copy

Make a copy of the log file, but don't change the original at all. This option can be used, for instance, to make a snapshot of the current
log file, or when some other utility needs to truncate or parse the file. When this option is used, the create option will have no effect,
as the old log file stays in place.

複製一份log檔案出來,不會對原本的檔案做任何事,若有設定copy參數,則忽略 create 參數。

copytruncate

Truncate the original log file in place after creating a copy, instead of moving the old log file and optionally creating a new one. It can
be used when some program cannot be told to close its logfile and thus might continue writing (appending) to the previous log file forever.
Note that there is a very small time slice between copying the file and truncating it, so some logging data might be lost. When this option
is used, the create option will have no effect, as the old log file stays in place.

複製一份出來之後將原本的log清空,這個選項是給某些程式會一直開著(佔用)log檔案,並持續在最後寫log的情況。

(但他也提到,在複製跟清空之間會有一段很小的時間差,這會造成部分log遺失,所以沒有這種特殊情況還是不要使用比較好。)

create [mode owner group], create [owner group]

Immediately after rotation (before the postrotate script is run) the log file is created (with the same name as the log file just rotated).
mode specifies the mode for the log file in octal (the same as chmod(2)), owner specifies the user name who will own the log file, and group
specifies the group the log file will belong to. Any of the log file attributes may be omitted, in which case those attributes for the new
file will use the same values as the original log file for the omitted attributes. This option can be disabled using the nocreate option.

在備份之後(在 postrotate 之前)立即產生一個新的檔案,並可以指定這檔案的擁有者與群組和權限設定(與chmod指令一樣),預設會跟原本檔案一致。 若不要自動產生,可以使用 nocreate 選項來關閉。

olddir directory

Logs are moved into directory for rotation. The directory must be on the same physical device as the log file being rotated, unless copy,
copytruncate or renamecopy option is used. The directory is assumed to be relative to the directory holding the log file unless an absolute
path name is specified. When this option is used all old versions of the log end up in directory. This option may be overridden by the
noolddir option.

olddir設定舊的檔案會被放置的資料夾位置,該資料夾必須與log檔案在同一個物理設備上,不然就要用 copy, copytruncate, renamecopy 等參數。

olddir設定的路徑會相對於該log檔案,不然就要設定絕對路徑。

而這個設定有可能被 noolddir 給覆蓋

createolddir [mode owner group]

If the directory specified by olddir directive does not exist, it is created. mode specifies the mode for the olddir directory in octal (the
same as chmod(2)), owner specifies the user name who will own the olddir directory, and group specifies the group the olddir directory will
belong to. This option can be disabled using the nocreateolddir option.

如果 olddir 設定的資料夾不存在,會自動建立一個,並可以設置該資料夾的擁有者與群組和權限。

如果要不自動建立資料夾,可使用 nocreateolddir

daily Log files are rotated every day.

每天都會做一次備份與壓縮log

dateext

Archive old versions of log files adding a date extension like YYYYMMDD instead of simply adding a number. The extension may be configured
using the dateformat and dateyesterday options.

在舊檔案後面加入日期,格式可以用 dateformat設定,也可以用 dateyesterday 指定給昨天的日期。

dateformat format_string

Specify the extension for dateext using the notation similar to strftime(3) function. Only %Y %m %d %H and %s specifiers are allowed. The
default value is -%Y%m%d except hourly, which uses -%Y%m%d%H as default value. Note that also the character separating 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 date‐
stamps 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.

設定時間的格式,只接受 %Y, %m, %d, %H, %s 等參數,預設是 -%Y%m%d,而且在設定日期時要按照年月日的順序,所以2001/12/01沒問題,但如果設定 01/12/2001就不行,因為此程式會先按照名稱排序之後決定哪個比較舊要刪除。

dateyesterday

Use yesterday's instead of today's date to create the dateext extension, so that the rotated log file has a date in its name that is the
same as the timestamps within it.

在最後會放昨天的日期,這樣在檔案名稱上的日期就跟檔案裡所記錄的日期一致了

delaycompress

Postpone compression of the previous log file to the next rotation cycle. This only has effect when used in combination with compress. It
can be used when some program cannot be told to close its logfile and thus might continue writing to the previous log file for some time.

將壓縮的時機延後到下次啟動的時候,這能處理某些程式無法及時關閉寫入log時,持續寫入該檔案的狀況。

extension ext

Log files with ext extension can keep it after the rotation. If compression is used, the compression extension (normally .gz) appears
after ext. For example you have a logfile named mylog.foo and want to rotate it to mylog.1.foo.gz instead of mylog.foo.1.gz.

指定備份的副檔名,例如有一個log叫mylog.foo,你並不希望壓縮後變成 mylog.foo.1.gz,而是 mylog.1.foo.gz,則可以設定這個參數

hourly

Log files are rotated every hour. Note that usually logrotate is configured to be run by cron daily. You have to change this configuration
and run logrotate hourly to be able to really rotate logs hourly.

每小時都做備份跟壓縮,但要注意的是,logrotate透過cron job每天執行一次,所以要記得改cron job的時程,才能真正每小時做一次。

ifempty

Rotate the log file even if it is empty, overriding the notifempty option (ifempty is the default).

就算檔案是空的也會做備份跟壓縮,相對應的參數是 notifempty

include file_or_directory

Reads the file given as an argument as if it was included inline where the include directive appears. If a directory is given, most of the
files in that directory are read in alphabetic order before processing of the including file continues. The only files which are ignored are
files which are not regular files (such as directories and named pipes) and files whose names end with one of the taboo extensions, as spec‐
ified by the tabooext directive.

不知道這具體在做什麼,要實驗過後才知道。

mail address

When a log is rotated out-of-existence, it is mailed to address. If no mail should be generated by a particular log, the nomail directive
may be used.

做完之後會幫你mail到指定位址

mailfirst

When using the mail command, mail the just-rotated file, instead of the about-to-expire file.

只會寄剛處理好的檔案

maillast

When using the mail command, mail the about-to-expire file, instead of the just-rotated file (this is the default).

會寄所有即將過期(刪除)的檔案

maxage count

Remove rotated logs older than days. The age is only checked if the logfile is to be rotated. The files are mailed to the configured
address if maillast and mail are configured.

會自動刪除超過設定天數的檔案,並將這些檔案寄到指定信箱。

maxsize size

Log files are rotated when they grow bigger than size bytes even before the additionally specified time interval (daily, weekly, monthly, or
yearly). The related size option is similar except that it is mutually exclusive with the time interval options, and it causes log files to
be rotated without regard for the last rotation time. When maxsize is used, both the size and timestamp of a log file are considered.

設定最大檔案大小,單位是 bytes,如果檔案超過設定大小,會無視設定的處理時間,並做備份壓縮處理,例如設定一個月執行一次,但檔案超過10MB,就會在一個月到了之前做備份與壓縮。

minsize size

Log files are rotated when they grow bigger than size bytes, but not before the additionally specified time interval (daily, weekly,
monthly, or yearly). The related size option is similar except that it is mutually exclusive with the time interval options, and it causes
log files to be rotated without regard for the last rotation time. When minsize is used, both the size and timestamp of a log file are con‐
sidered.

設定最小檔案大小,單位是 bytes,如果小於設定的大小,就無視設定的時間,並排除在處理名單。

missingok

If the log file is missing, go on to the next one without issuing an error message. See also nomissingok.

如果要處理的檔案不存在,就直接忽略,進行下一個處理。

monthly

Log files are rotated the first time logrotate is run in a month (this is normally on the first day of the month).

每個月處理一次,一般會在每個月的第一天做備份與壓縮。

nocompress

Old versions of log files are not compressed. See also compress.

不壓縮。

nocopy

Do not copy the original log file and leave it in place. (this overrides the copy option).

不複製原始檔案。

nocopytruncate

Do not truncate the original log file in place after creating a copy (this overrides the copytruncate option).

在複製完備份後不清空原始檔案

nocreate

New log files are not created (this overrides the create option).

新的log檔案不會被自動創建

nocreateolddir

olddir directory is not created by logrotate when it does not exist.

olddir 設定的資料夾不存在的話,就不會自動創建。

nodelaycompress

Do not postpone compression of the previous log file to the next rotation cycle (this overrides the delaycompress option).

壓縮不 delay

nodateext

Do not archive old versions of log files with date extension (this overrides the dateext option).

不在最後加上日期

nomail

Don't mail old log files to any address.

不寄 E-mail

nomissingok

If a log file does not exist, issue an error. This is the default.

如果要處理的檔案不存在,會觸發一個錯誤,這是預設值。

noolddir

Logs are rotated in the same directory the log normally resides in (this overrides the olddir option).

備份跟壓縮的檔案會跟原始檔案放在一起

nosharedscripts

Run prerotate and postrotate scripts for every log file which is rotated (this is the default, and overrides the sharedscripts option). The
absolute path to the log file is passed as first argument to the script. If the scripts exit with error, the remaining actions will not be
executed for the affected log only.

在執行prerotate 和 postrotate 程式的時候,會將每個要處理的 log 當做第一個參數傳遞給每隻程式,若該程式結束時有錯誤,則不會處理該隻log

noshred

Do not use shred when deleting old log files. See also shred.

不使用 shred 指令刪除檔案

notifempty

Do not rotate the log if it is empty (this overrides the ifempty option).

若檔案為空則不處理

postrotate/endscript

The lines between postrotate and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh) after the log
file is rotated. These directives may only appear inside a log file definition. Normally, the absolute path to the log file is passed as
first argument to the script. If sharedscripts is specified, whole pattern is passed to the script. See also prerotate. See sharedscripts
and nosharedscripts for error handling.

在做完備份與壓縮之後,會執行 postrotate 跟 endscript 之間的指令,第一個參數是處理的log檔案的絕對路徑,若設定 sharedscripts 則會把所有處理過的檔案通通傳遞給要執行的程式。

prerotate/endscript

The lines between prerotate and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh) before the log
file is rotated and only if the log will actually be rotated. These directives may only appear inside a log file definition. Normally, the
absolute path to the log file is passed as first argument to the script. If sharedscripts is specified, whole pattern is passed to the
script. See also postrotate. See sharedscripts and nosharedscripts for error handling.

這是在處理檔案之前會執行的程式

firstaction/endscript

The lines between firstaction and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh) once before all
log files that match the wildcarded pattern are rotated, before prerotate script is run and only if at least one log will actually be
rotated. These directives may only appear inside a log file definition. Whole pattern is passed to the script as first argument. If the
script exits with error, no further processing is done. See also lastaction.

這會比 prerotate 更早執行,而且要真的有檔案會被處理才會執行,第一個參數是所有即將處理的檔案,若有錯誤,則不會繼續處理。

lastaction/endscript

The lines between lastaction and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh) once after all
log files that match the wildcarded pattern are rotated, after postrotate script is run and only if at least one log is rotated. These
directives may only appear inside a log file definition. Whole pattern is passed to the script as first argument. If the script exits with
error, just an error message is shown (as this is the last action). See also firstaction.

這是在 postrotate 之後執行的程式,第一個參數是所有被處理的檔案,若有錯誤,則只會紀錄錯誤訊息。

preremove/endscript

The lines between preremove and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh) once just before
removal of a log file. The logrotate will pass the name of file which is soon to be removed. See also firstaction.

這是在刪除檔案之前會執行的程式,參數是即將被刪除檔案的名稱。

rotate count

Log files are rotated count times before being removed or mailed to the address specified in a mail directive. If count is 0, old versions
are removed rather than rotated.

這是在啟動處理 次後,把 之前的檔案刪除或寄給某個信箱。若設定為0,則只會刪除舊的,保留剛壓縮的。

size size

Log files are rotated only if they grow bigger then size bytes. If size is followed by k, the size is assumed to be in kilobytes. If the M
is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, size 100k, size 100M and size 100G are all
valid.

Log 檔案只會在大於設定的大小後,才會被備份與壓縮,可以直接寫大小的單位,k,M,G預設是bytes

sharedscripts

Normally, prerotate and postrotate scripts are run for each log which is rotated and the absolute path to the log file is passed as first
argument to the script. That means a single script may be run multiple times for log file entries which match multiple files (such as the
/var/log/news/* example). If sharedscripts is specified, the scripts are only run once, no matter how many logs match the wildcarded pat‐
tern, and whole pattern is passed to them. However, if none of the logs in the pattern require rotating, the scripts will not be run at
all. If the scripts exit with error, the remaining actions will not be executed for any logs. This option overrides the nosharedscripts
option and implies create option.

預設每次執行 prerotate 與 postrotate 是每個檔案都執行一次,但若設定 sharedscripts,則會把此次符合的所有檔案一次丟進這些script裡,若有錯誤發生則全部都不處理

shred

Delete log files using shred -u instead of unlink(). This should ensure that logs are not readable after their scheduled deletion; this is
off by default. See also noshred.

刪除檔案的時候用 shred 指令取代 unlink,預設關閉

shredcycles count

Asks GNU shred(1) to overwrite log files count times before deletion. Without this option, shred's default will be used.

這跟 shred 指令有關,可以設定要刪除幾次

start count

This is the number to use as the base for rotation. For example, if you specify 0, the logs will be created with a .0 extension as they are
rotated from the original log files. If you specify 9, log files will be created with a .9, skipping 0-8. Files will still be rotated the
number of times specified with the rotate directive.

這設定從哪個數字開始編號,在每次壓縮後 logrotate 都會給這個檔案一個流水編號,你可以指定從幾號開始

su user group

Rotate log files set under this user and group instead of using default user/group (usually root). user specifies the user name used for
rotation and group specifies the group used for rotation.

指定用哪個身份執行 logrotate

tabooext [+] list

The current taboo extension list is changed (see the include directive for information on the taboo extensions). If a + precedes the list of
extensions, the current taboo extension list is augmented, otherwise it is replaced. At startup, the taboo extension list contains .rpmsave,
.rpmorig, ~, .disabled, .dpkg-old, .dpkg-dist, .dpkg-new, .cfsaved, .ucf-old, .ucf-dist, .ucf-new, .rpmnew, .swp, .cfsaved, .rhn-cfg-tmp-*

感覺像是略過某些副檔名的檔案,具體做用要實驗後才知道

weekly

Log files are rotated if the current weekday is less than the weekday of the last rotation or if more than a week has passed since the last
rotation. This is normally the same as rotating logs on the first day of the week, but it works better if logrotate is not run every night.

這通常會在每個禮拜的第一天進行,或是距離上次處理時間超過一周也會執行。

yearly

Log files are rotated if the current year is not the same as the last rotation.

如果現在的年份跟上次處理的年份不同才會啟動

範例

通常設定檔會放在 /etc/logrotate.d

# sample logrotate configuration file
       compress

       /var/log/messages {
           rotate 5
           weekly
           postrotate
               /usr/bin/killall -HUP syslogd
           endscript
       }

       "/var/log/httpd/access.log" /var/log/httpd/error.log {
           rotate 5
           mail [email protected]
           size 100k
           sharedscripts
           postrotate
               /usr/bin/killall -HUP httpd
           endscript
       }

       /var/log/news/* {
           monthly
           rotate 2
           olddir /var/log/news/old
           missingok
           postrotate
               kill -HUP `cat /var/run/inn.pid`
           endscript
           nocompress
       }

       ~/log/*.log {}

看更多