Lan*_*are 1 linux compression logging
我正在 Linux (CentOS 7) 上运行一个进程,它在 stdout 上产生大量输出。将其全部发送到文件将导致文件大小大于 1 TB。但令人高兴的是,输出是相当可压缩的——它由许多相当重复的文本组成。
我的想法是,我可以使用类似于此处描述的某种日志轮换程序:(标准输出的日志轮换?),但是一旦日志不再是最新的,它就会被压缩(并且永远不会被删除)?所以我最终会向文件写入几个 GB,压缩它,然后继续写入一个新文件?
您可以为此使用logrotate。CentOS 7 使用systemd,因此您可以使用以下内容配置计划的 logrotate 任务:
在/etc/systemd/system调用中创建一个 logrotate 配置文件,mylogrotate.config内容如下:
/path/to/your/logfile/*.log {
compress
copytruncate
delaycompress
minsize 1G
missingok
nomail
notifempty
rotate 30
}
Run Code Online (Sandbox Code Playgroud)这将告诉 logrotate 执行以下操作:
创建系统服务。使用以下命令在/etc/systemd/system调用中创建一个文件mylogrotate.service:
[Unit]
Description=Rotate My Log
[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/systemd/system/mylogrotate.config --state /etc/systemd/system/mylogrotate.state --verbose
Run Code Online (Sandbox Code Playgroud)
让我们安排这个任务。使用以下命令在/etc/systemd/system调用中创建第三个文件mylogrotate.timer:
[Unit]
Description=Rotate My Log Timer
[Timer]
OnCalendar=*:00:00
Persistent=true
[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)
这将每小时运行一次 logrotate。
一切都已经设置好了。现在启用计划任务。
systemctl enable mylogrotate.timer
systemctl start mylogrotate.timer
Run Code Online (Sandbox Code Playgroud)
当然,以 root 身份执行所有这些操作。
(我在 Ubuntu 上,但我希望这能在 CentOS 上正常工作而没有任何问题)