[systemd-devel] the intended behavior of EnvironmentFile
Lennart Poettering
lennart at poettering.net
Thu Jun 28 09:01:54 UTC 2018
On Mi, 27.06.18 00:33, Igor Bukanov (igor at mir2.org) wrote:
> Hi,
>
> the man page for systemd.exec tells that for EnvironmentFile:
>
> The files listed with this directive will be read shortly before the
> process is executed (more specifically, after all processes from a
> previous unit state terminated. This means you can generate these
> files in one unit state, and read it with this option in the next).
>
> Yet for a service unit with, for example, several ExecStartPost
> commands the environment files are parsed before each invocation of
> ExecStartPost even if there is no change in the state of the unit and
> not all processes are terminated. I.e. when starting a service like:
>
> [Service]
> Type=oneshot
> EnvironmentFile=-/run/foo.env
> ExecStart=/bin/sh -c 'echo FOO=BAR > /run/foo.env'
> ExecStartPost=/bin/sh -c 'echo $FOO; echo FOO=BAR2 > /run/foo.env; sleep 5&'
> ExecStartPost=/bin/sh -c 'echo $FOO; echo FOO=BAR3 > /run/foo.env'
> ExecStartPost=/bin/sh -c 'echo $FOO'
>
> the log contains BAR BAR2 BAR3 even if there no change of the state in
> the unit state between ExecStartPost and the last ExecStartPost runs
> when the sleep command still runs.
>
> It is just poor wording in the documentation, isn't it? I.e. the
> intended behavior is that the environment file are parsed before
> executing any Exec* line irrespective of the unit state, right?
Yes, it's poor wording. Could you file a github issue about this
please, so that we can fix it? (even better: post a PR)
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list