如何阻止 logrotate 更改轮换日志的所有者

如何阻止 logrotate 更改轮换日志的所有者

我有一个由“apache”用户拥有的日志文件,我想用logrotate来轮换它。

我想通过以不同的用户身份运行 logrotate 来做到这一点,比如使用 copytruncate 策略的“web”。

失败并出现以下错误:

error: error setting owner of ./logfile.log.1: Operation not permitted

但这只是因为 logrotate 试图将新文件的所有者更改为轮换文件的所有者,即 apache。但我不在乎新文件是否具有相同的所有者,如果 logrotate 会创建以“web”为所有者的副本,那就没问题了,然后它就可以正常工作了。

那么有什么方法可以阻止 logrotate 更改复制文件的所有者?

答案1

create在我的/etc/logrotate.d/文件中使用了该指令。例如:

create 0664 www-data www-data

答案2

create可能会按照你在问题最后一句中描述的方式去做,但是这个选项与 不兼容copytruncate,你也说过你想使用 。

答案3

我解决了与 postrotate 和 prerotate 选项相同的问题:

/opt/bars/web_edu/var/log/nginx*.log {
        su web_edu web_edu
        daily
    compress
        missingok
        rotate 30
        dateext
        notifempty
        create 0644 web_edu web_edu
        sharedscripts
        prerotate
                chown web_edu:web_edu /opt/bars/web_edu/var/log/nginx*.log
        endscript
        postrotate
                [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` || true
                chown web_edu:web_edu /opt/bars/web_edu/var/log/nginx*.gz
                chown web_edu:web_edu /opt/bars/web_edu/var/log/nginx*.log
        endscript
}

相关内容