[systemd-devel] non-existent unit instances
Michael Chapman
mike at very.puzzling.org
Sat Sep 5 13:37:11 UTC 2020
On Sat, 5 Sep 2020, Richard Hector wrote:
> Hi all,
>
> Quoting from another thread:
>
> On 5/09/20 4:36 am, Lennart Poettering wrote:
> > Unit instances can be activated on-the-fly without further prepartion
> > or regsitration of the instance string or so. it's sufficient if the
> > template unit exists.
>
> Is that preventable?
>
> I have some instance names that are easily typoed. When I start one with
> the wrong name, it sticks around trying to restart for ever - or at
> least till I notice it or reboot - where I'm much rather get an error
> message and stop.
>
> For reference, this is with the openvpn-client@ (and maybe
> openvpn-server@) units in Debian buster. Some of the content was
> modified/overwritten by me, so it could well be a bug introduced by me.
Since the instance name for this unit is used to derive a configuration
filename, a simple solution here would be to use:
ConditionPathExists=/etc/openvpn/client/%i.conf
in the unit. Or, if you want the start job to fail when given a bad
instance name:
AssertPathExists=/etc/openvpn/client/%i.conf
> The typos are because my instances are based on hostname, which can
> contain '-' but not '_'. Instance names can apparently not contain '-',
> so I have to use '_' instead, but my muscle memory for my hostnames is
> strong.
Instance names can contain hyphens, however depending on how they're used
these hyphens will be translated into slashes. The %I specifier does this
kind of translation, for instance.
This upstream OpenVPN units use %i when they reference configuration
filenames, however, and this does not perform any translation on the
instance name. I'm not sure why hyphens would cause problems for you.
> I don't know if this is a result of the way the units are written, or an
> inherent issue with systemd.
>
> Cheers,
> Richard
More information about the systemd-devel
mailing list