Files
deploy_home/ansible/roles/podman/templates/zomboid/logrotate.j2
T
Bastian de BylandClaude Opus 5 91d9f6b419 fix: actually bound the Zomboid log archive, which logrotate could not
The logrotate config added with the Sophie overhaul claimed to bound PZ's own
logs. It did not. data/Logs had reached 18 GB across 112 entries and 146k
files, and rotation had never once fired there.

Two reasons, both wrong assumptions on my part. PZ rolls its logs into dated
directories -- logs_2025-12-14/ through logs_2026-08-26/, up to 279 MB each --
so the Logs/*.txt glob only ever matched a handful of loose files at the top.
And it rotates by size: not one file in that tree exceeds 100M, because the
growth is in the number of files, not the size of any of them.

Age-based pruning is the right tool, so this adds a daily zomboid-log-prune
timer keeping 14 days and deleting the emptied directories behind it. It runs
under podman unshare, since the files belong to the container's UID.

logrotate keeps server-console.txt, which is a single ever-growing file and
genuinely is what it is good at. Narrowed its scope to say so rather than
implying coverage it never had.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-26 02:34:30 -04:00

31 lines
1.2 KiB
Django/Jinja

# {{ ansible_managed }}
#
# Project Zomboid's server console, which is a single ever-growing file. This is
# separate from the container's stdout, which podman rotates itself via the
# k8s-file driver's max_size.
#
# Scope is deliberately just this file. PZ's other logs live in dated
# directories under Logs/ that grow in file *count*, not file size, so nothing
# there ever crosses a rotation threshold -- those are pruned by age instead,
# via zomboid-log-prune.timer.
#
# copytruncate is mandatory here: the server holds these fds open for the whole
# life of the process, so a rename would leave it writing into an unlinked
# inode and the file would appear to simply stop growing.
#
# The Discord bot tails server-console.txt from a byte offset and resets that
# offset when the file shrinks, so a truncate under it is safe.
{{ zomboid_path }}/data/server-console.txt
{
# size, not a time directive: logrotate's daily timer is when this is
# *checked*, 100M is when it actually rotates. Specifying both makes
# logrotate warn that size overrides daily.
copytruncate
size 100M
rotate 3
compress
delaycompress
missingok
notifempty
}