having to upgrade varnish isn't helping with the anger issues.

I AM NOW FULL OF RAGE.

AM NOW DEBUGGING SYSTEMD, AND HAVING TO LEARN THE INTERNALS.

ALL OF THE RAGE

not kidding, we fixed it with:

EnvironmentFile=-/etc/default/varnish
ExecStart=/bin/bash -c "/bin/echo ${DAEMON_OPTS} && /usr/sbin/varnishd ${DAEMON_OPTS}"

Because otherwise systemd would randomly eat parts of ${DAEMON_OPTS}. oh yes, we *also* had to make DAEMON_OPTS a single line, because *something* didn't like '\' continuation chars.

systemd is the worst software I've ever had to use, and I've used AIX, HP-UX, Solaris, and 16-bit Windows Payroll software.

STILL FULL OF RAGE

systemd parses and interprets ${VARIABLE} different than shells do.

in every shell that has ever existed, ${VARIABLE} ensures that only VARIABLE is expanded, even if VAR also exists.

systemd instead passes the entirety of VARIABLE as a single argument.

so argv and argc were wrong

ARGV AND ARGC WERE FUCKING WRONG!

@phessler Do you mean it behaves exactly as written in the doc and illustrated by an example ?

--------------------------8<--------------------------
Example:

Environment="ONE=one" 'TWO=two two'
ExecStart=/bin/echo $ONE $TWO ${TWO}

This will execute /bin/echo with four arguments: "one", "two", "two", and "two two".
--------------------------8<--------------------------

https://www.freedesktop.org/software/systemd/man/systemd.service.html

@smortex yes. That is 100% broken. Should never have existed like that.
@phessler remember that there is no shell there to guess which arguments should be split at spaces and which should not (as you would do using quotes with a shell)… A syntax that allows you to split or not split during variables expansion definitively makes sense IMHO.
@smortex not to mention, conflicting with extremely common syntax, is also a serious bug.