logrotate只读文件系统问题

logrotate手动以root执行成功,但是自动运行失败。

systemd日志提示:

1
logrotate: error: error renaming  /usr/local/nginx/logs/site.access.log.7.gz to /usr/local/nginx/logs/site.access.log.8.gz: Read-only file system

因为systemd有沙盒sandbox机制,可以限制service对文件系统的访问

/lib/systemd/system/logrotate.service

1
2
[Service]
ProtectSystem=full

这里启用了文件系统保护,当设置为full时,/usr、/boot、/efi和/etc文件系统是只读的,所以出现了上面的问题。可以添加一个参数来豁免特定的文件系统,让service对其可以读写,这里unit文件添加以下行:

1
2
3
[Service]
ProtectSystem=full
ReadWritePaths=/usr/local/nginx/logs

然后

1
$ sudo systemctl daemon-reload

References:

[1]logrotate read only system

[2]systemd.exec