统信uos中日志轮转可通过四种方法实现:一、logrotate配置规则;二、crontab定时触发;三、systemd timer调度;四、rsyslog内置轮转。

如果您在统信UOS系统中持续生成日志文件,但未配置自动清理机制,则可能导致/var/log/目录空间耗尽、系统响应迟缓甚至服务异常。以下是实现日志轮转的多种可行方法:
一、使用logrotate配置日志轮转
logrotate是Linux标准日志轮转工具,通过定义规则文件控制日志切割、压缩、保留周期等行为,适用于绝大多数文本日志文件。
1、创建日志存储目录:执行 sudo mkdir -p /var/log/hello 确保目标路径存在。
2、创建测试日志文件并验证可写:运行 sudo touch /var/log/hello/hello.txt && sudo chmod 640 /var/log/hello/hello.txt。
3、编辑logrotate配置文件:执行 sudo vim /etc/logrotate.d/hello,写入以下内容:
/var/log/hello/hello.txt {
su root root
rotate 7
daily
compress
missingok
notifempty
create 640 root adm
dateext
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
sharedscripts
copytruncate
}
二、结合crontab实现定时触发轮转
当logrotate默认的每日执行时机不满足需求,或需在特定时间点强制执行轮转时,可通过crontab调用logrotate命令手动触发。
1、编辑root用户的定时任务:执行 sudo crontab -e。
2、在编辑器中添加一行: 0 2 * * * /usr/sbin/logrotate /etc/logrotate.d/hello,表示每天凌晨2点执行该配置。
3、保存退出后,确认任务已生效:运行 sudo crontab -l 查看输出是否包含上述条目。
三、通过systemd timer替代crontab调度
systemd timer提供更精确的时间控制与依赖管理能力,适合与logrotate深度集成,避免crontab兼容性问题。
1、创建timer单元文件:执行 sudo vim /etc/systemd/system/hello-logrotate.timer,填入:
[Unit]
Description=Run hello logrotate daily
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
2、创建对应service单元文件:执行 sudo vim /etc/systemd/system/hello-logrotate.service,填入:
[Unit]
Description=Rotate hello logs
[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.d/hello
User=root
3、启用并启动timer:依次执行 sudo systemctl daemon-reload、sudo systemctl enable hello-logrotate.timer、sudo systemctl start hello-logrotate.timer。
四、使用rsyslog内置轮转功能
对于由rsyslog直接管理的日志(如/var/log/syslog、/var/log/messages),可通过修改rsyslog配置启用原生轮转,无需额外调用logrotate。
1、编辑rsyslog主配置:执行 sudo vim /etc/rsyslog.conf。
2、取消注释并修改以下两行:
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$ActionFileEnableSync on
3、在文件末尾添加模板定义:
$template DailyRotate,"/var/log/syslog-%$YEAR%%$MONTH%%$DAY%.log"
*.* ?DailyRotate;RSYSLOG_TraditionalFileFormat
& stop
4、重启rsyslog服务:运行 sudo systemctl restart rsyslog 生效。










