使用 logrotate 旋转日志并移动旧文件

使用 logrotate 旋转日志并移动旧文件

Logrotate 不会将文件移动到 oldlogs 文件夹并异常退出,代码为 1。我尝试使用 -d 选项手动启动它,但没有显示任何错误。这是我的配置:

/var/log/myfolder/*.log
{
        rotate 4
        daily
        missingok
        size=100M
        notifempty
        copytruncate
        compress
        delaycompress
        create 640 root root
        dateformat -%Y-%m-%d-%s
        sharedscripts
        postrotate
                mv /var/log/myfolder/*.gz /var/log/myfolder/oldlogs/
                /etc/init.d/rsyslog restart
        endscript
}

任何想法?

我有许多文件需要不断更新,我想将压缩文件放在另一个目录 (oldlogs) 中以便存储。对于我的目的来说,rotate 命令是不必要的,但我的问题是我无法将文件移动到 oldlogs 目录。

答案1

您不需要自己移动旧日志文件,日志轮换会为您完成此项工作。

您不需要在postrotate脚本中重新启动 rsyslog,除非您要轮换从 rsyslog 写入的日志。如果是这种情况,您不需要完全重新启动 rsyslog,而是使用kill -HUP $(cat /var/run/rsyslogd.pid)(假设这是 rsyslog 的 pid)。

目标是让服务停止尝试写入旧文件处理程序并开始写入新的日志文件。

如果您尝试对由其他服务写入的日志进行日志轮转,-HUP可能不受支持。

使用什么驱动程序copy truncate?这有点奇怪。

更多详细信息请参阅Logrotate https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

答案2

-vf我猜如果你想让 logrotate 运行now,你需要-d禁用任何操作,有关详细信息,请查看man logrotate

答案3

您将需要使用完整路径以及mv开关-f来强制移动。

相关内容