我有一个由“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
}