原文链接:统信UOS/麒麟KYLINOS配置日志轮转
hello,大家好啊,今天给大家带来一篇在统信UOS/麒麟KYLINOS上配置日志轮转的文章。本文举例的内容如下:首先我们创建一个定时任务,在每天00:00给/var/log/hello路径下的hello.txt文件中添加hello pdsyw,然后配置一个/etc/logrotate.d/hello文件,每天对hello.txt文件进行压缩,这是一个简单的示例,大家可以根据需要进行配置。关注我吧!
1、查看系统信息
pdsyw@pdsyw-PC:~/Desktop$ cat /etc/os-version
[Version]
SystemName=UOS Desktop
SystemName[zh_CN]=统信桌面操作系统
ProductType=Desktop
ProductType[zh_CN]=桌面
EditionName=Professional
EditionName[zh_CN]=专业版
MajorVersion=20
MinorVersion=1060
OsBuild=11014.100.100
pdsyw@pdsyw-PC:~/Desktop$
pdsyw@pdsyw-PC:~/Desktop$ uname -a
Linux pdsyw-PC 4.19.0-arm64-desktop #6030 SMP Tue Jun 27 15:28:10 CST 2023 aarch64 GNU/Linux
pdsyw@pdsyw-PC:~/Desktop$
2、创建/var/log/hello并编写crontab
pdsyw@pdsyw-PC:~/Desktop$ sudo -i
请输入密码:
验证成功
root@pdsyw-PC:~# mkdir /var/log/hello
root@pdsyw-PC:~#
root@pdsyw-PC:~# crontab -e
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
Choose 1-3 [1]: 2
crontab: installing new crontab
root@pdsyw-PC:~# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
0 0 * * * echo "hello pdsyw" >> /var/log/hello/hello.txt
root@pdsyw-PC:~#
3、crontab内容
4、修改日期,查看hello.txt是否生成
root@pdsyw-PC:~# date -s 2023-11-26
2023年 11月 26日 星期日 00:00:00 CST
root@pdsyw-PC:~#
root@pdsyw-PC:~# cd /var/log/hello/
root@pdsyw-PC:/var/log/hello#
root@pdsyw-PC:/var/log/hello# ls -ltr
总用量 4
-rw-r--r-- 1 root root 12 11月 24 00:00 hello.txt
root@pdsyw-PC:/var/log/hello# cat hello.txt
hello pdsyw
hello pdsyw
root@pdsyw-PC:/var/log/hello#
5、编写 /etc/logrotate.d/hello文件
root@pdsyw-PC:~# cd /etc/logrotate.d/
root@pdsyw-PC:/etc/logrotate.d#
root@pdsyw-PC:/etc/logrotate.d# vi hello
root@pdsyw-PC:/etc/logrotate.d# cat hello
/var/log/hello/hello.txt {
#指定 logrotate 以 root 用户和 root 组的身份执行日志文件的轮转
su root root
#保留最近7个轮转周期的日志文件副本
rotate 7
#每天轮转一次日志文件
daily
#压缩轮转后的旧日志文件,通常是使用gzip压缩
compress
#压缩轮转后的旧日志文件,通常是使用gzip压缩
missingok
#只有当日志文件非空时才进行轮转
notifempty
#创建新的日志文件,设置权限为 640,所有者为 root,组为 adm。
create 640 root adm
#在轮转的日志文件名后添加日期作为扩展名
dateext
#定义添加到轮转日志文件名中的日期格式。这里的格式是 年月日(如 20231128)
dateformat -%Y%m%d
# 在所有日志轮转之前执行
firstaction
echo "Starting log rotation for /var/log/hello"
endscript
# 在轮转每个日志文件之前执行
prerotate
echo "Preparing to rotate /var/log/hello log files"
endscript
# 在轮转每个日志文件之后执行
postrotate
echo "Finished rotating /var/log/hello log files"
endscript
# 在所有日志轮转之后执行
lastaction
echo "Log rotation for /var/log/hello completed"
endscript
# 当日志文件超过指定大小时进行轮转
maxsize 1M
# 如果设置了此选项,则在处理所有匹配的日志文件之后只运行一次 postrotate 脚本
sharedscripts
# 复制原始日志文件并将其截断,适用于无法轻易重启的服务
copytruncate
}
root@pdsyw-PC:/etc/logrotate.d#
6、修改时间查看/etc/logrotate.d/hello是否生效
root@pdsyw-PC:/etc/logrotate.d# logrotate /etc/logrotate.d/hello
root@pdsyw-PC:/etc/logrotate.d# cd /var/log/hello/
root@pdsyw-PC:/var/log/hello# ls -ltr
总用量 4
-rw-r--r-- 1 root root 24 11月 26 2023 hello.txt
root@pdsyw-PC:/var/log/hello# date -s 2023-11-27
2023年 11月 27日 星期一 00:00:00 CST
root@pdsyw-PC:/var/log/hello#
root@pdsyw-PC:/var/log/hello# ls -ltr
总用量 4
-rw-r--r-- 1 root root 35 11月 26 00:00 hello.txt-20231127.gz
-rw-r--r-- 1 root root 0 11月 27 00:00 hello.txt
root@pdsyw-PC:/var/log/hello#
7、生成7个压缩文件
root@pdsyw-PC:/var/log/hello# ls -ltr
总用量 28
-rw-r--r-- 1 root root 25 11月 22 15:19 hello.txt-20231127.gz
-rw-r--r-- 1 root root 23 11月 22 15:20 hello.txt-20231201.gz
-rw-r--r-- 1 root root 23 11月 27 00:00 hello.txt-20231128.gz
-rw-r--r-- 1 root root 23 11月 28 00:00 hello.txt-20231129.gz
-rw-r--r-- 1 root root 23 11月 29 00:00 hello.txt-20231130.gz
-rw-r--r-- 1 root root 23 12月 1 00:00 hello.txt-20231202.gz
-rw-r--r-- 1 root root 23 12月 2 00:00 hello.txt-20231203.gz
-rw-r--r-- 1 root root 0 12月 3 00:00 hello.txt
root@pdsyw-PC:/var/log/hello#
8、生成第8个压缩文件,查看第一个是否被删除
root@pdsyw-PC:/var/log/hello# date -s 2023-12-4
2023年 12月 04日 星期一 00:00:00 CST
root@pdsyw-PC:/var/log/hello# ls -tlr
总用量 28
-rw-r--r-- 1 root root 23 11月 22 15:20 hello.txt-20231201.gz
-rw-r--r-- 1 root root 23 11月 27 00:00 hello.txt-20231128.gz
-rw-r--r-- 1 root root 23 11月 28 00:00 hello.txt-20231129.gz
-rw-r--r-- 1 root root 23 11月 29 00:00 hello.txt-20231130.gz
-rw-r--r-- 1 root root 23 12月 1 00:00 hello.txt-20231202.gz
-rw-r--r-- 1 root root 23 12月 2 00:00 hello.txt-20231203.gz
-rw-r--r-- 1 root root 23 12月 3 00:00 hello.txt-20231204.gz
-rw-r--r-- 1 root root 0 12月 4 00:00 hello.txt
root@pdsyw-PC:/var/log/hello#
9、/etc/logrotate.d/hello文件选项详解
9.1、su root root选项
su [user] [group]
[user] 是执行日志轮转操作的用户。
[group] 是执行日志轮转操作的用户组。
su 指令的选项只有两个:用户和用户组。你可以根据需要将其设置为任何有效的系统用户和用户组。例如:
su syslog adm:指示 logrotate 使用 syslog 用户和 adm 组来处理日志文件。
su apache www-data:对于 Apache 日志文件,你可能会使用 apache 或 www-data 用户和用户组。
9.2、rotate 7选项
rotate [number]
[number] 是要保留的日志文件副本数量。
可以将 [number] 设置为任何合理的整数值,这取决于你需要保留日志文件的时间长度和可用的磁盘空间。
设置为 0 时,不会保留旧的日志文件副本,每次轮转都会删除旧文件。
设置为一个较大的数字时,可以长期保留日志文件。
9.3、daily选项
daily: 这是一个无参数指令,仅通过包含它来设置每天的轮转频率。
除了 daily,logrotate 还提供了其他几种基于时间的轮转频率选项:
hourly: 每小时轮转一次日志文件。这适用于那些生成大量日志的场景。
weekly: 每周轮转一次日志文件。这是比较常见的设置,适用于一般的日志轮转需求。
monthly: 每月轮转一次日志文件。这适用于日志产生较少或者可以保留较长时间的场景。
9.4、compress选项
1)compress:
这个无参数指令启用压缩功能,使得 logrotate 在轮转日志文件后自动压缩它们。默认是 gzip,但你可以指定其他如 bzip2 的命令:
compresscmd /usr/bin/bzip2
2)nocompress:
如果你不想压缩轮转的日志文件,可以使用 nocompress。这可以在某些情况下节省处理时间,尤其是当磁盘空间不是问题时。默认是 gzip,但你可以指定其他如 bzip2 的命令:
uncompresscmd /usr/bin/bunzip2
3)compressext:
指定压缩文件的扩展名。默认情况下,使用 gzip 时扩展名是 .gz。
compressext .bz2
4)compressoptions:
提供给压缩命令的额外选项。例如,调整压缩级别。
compressoptions -9
5)delaycompress:
与 compress 一起使用时,延迟压缩一个轮转周期。这对于仍在写入的日志文件很有用。
delaycompress
9.5、missingok选项
missingok:
如果设置了 missingok,当 logrotate 无法找到指定的日志文件时,它不会报错。这个指令在日志文件可能不会每天都生成或者在某些情况下可能被删除的场景中特别有用。
nomissingok:
这是 missingok 的默认行为(尽管通常不需要明确指定 nomissingok)。如果没有设置 missingok,并且 logrotate 找不到指定的日志文件,它会报错。这可以确保你知道某个重要的日志文件没有按预期生成。
9.6、notifempty选项
notifempty:
当设置了 notifempty,logrotate 将不会轮转那些空的日志文件。也就是说,如果一个日志文件没有内容(大小为零),logrotate 将忽略它并不进行轮转。这对于避免生成大量空的日志文件很有用。
empty (通常不需要明确指定):
这是 notifempty 的反操作,意味着即使日志文件是空的,logrotate 也会对其进行轮转。在默认情况下,logrotate 会轮转所有匹配的日志文件,包括空文件,所以通常不需要特别指定这个行为。
9.7、create 640 root adm选项
create [mode] [owner] [group]
[mode]: 设置新创建的日志文件的权限。通常以八进制数字表示(如 0640)。
[owner]: 设置新日志文件的所有者。这通常是一个有效的用户名。
[group]: 设置新日志文件的所属用户组。通常是一个有效的组名。
文件权限:
设置任何有效的 UNIX 文件权限。例如,create 600 root root 会创建一个只有 root 用户可读写的文件。
所有者:
可以是系统中任何有效的用户名。例如,create 640 www-data www-data 适用于网站日志文件。
用户组:
可以是系统中任何有效的用户组名。确保指定的用户是该组的成员。
9.8、dateext选项
dateext:
启用日期扩展名。启用后,轮转的日志文件名将包括一个基于当前日期的扩展名。
dateext:
启用日期扩展名。启用后,轮转的日志文件名将包括一个基于当前日期的扩展名。
9.9、dateformat -%Y%m%d选项
dateformat:
当使用 dateext 时,dateformat 指令用于自定义日期扩展名的格式。默认情况下,日期格式是 -YYYYMMDD(例如,-20210901),但你可以使用 dateformat 来更改它。
dateformat 指令仅在启用了 dateext 时有效,因为它是用于修改 dateext 生成的日期后缀的格式。