I have a service managed by systemd that has the following systemd config telling systemd to write the logs to a file directly (no syslog or anything)
StandardOutput=file:/var/log/foo/my.log I have a logrotate rule
/var/log/foo/*.log { rotate 31 daily missingok notifempty compress delaycompress sharedscripts } What's happening is that the logs are being rotated but the service is still writing to the old rotated file and the new log file stays empty.
I have a similar working setup where the service instead writes to syslog. That one works fine because the logrotate config has
postrotate invoke-rc.d rsyslog rotate > /dev/null , which notifies syslog that its log has been rotated.
The issue is that in my problematic case the log is going directly to the file so I don't know if (or which one) i need to send a similar signal to systemd or to the actual service process.
I found the copytruncate option in logrotate which i'm pretty sure will fix my problem but i'm getting the feeling that this is not the ideal way to do it, otherwise copytruncate would be the default behaviour of logrotate.
How do I solve this problem? do i need to send some signal to systemd? do i need to send some signal to the service process? do i have to use copytruncate in logrotate instead?
If it matters, the service is a java process using logback to write to stdout