This is from reading the shepherd code, not verified by test currently.
Apologies if I’m missing something.
The documentation claims that log-file is appended to:
When @var{log-file} is true, it names the file to which the service's
standard output and standard error are redirected. @var{log-file} is
created if it does not exist, otherwise it is appended to.
However, in modules/shepherd/service.scm:
889 (define make-forkexec-constructor
[…]
923 (lambda args
924 (define (clean-up file)
925 (when file
926 (catch 'system-error
927 (lambda ()
928 (delete-file file))
929 (lambda args
930 (unless (= ENOENT (system-error-errno args))
931 (apply throw args))))))
932
933 (clean-up pid-file)
934 (clean-up log-file)
935
936 (let ((pid (fork+exec-command command