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