On Thu, 13.03.14 14:37, Alan Stern (st...@rowland.harvard.edu) wrote: > This question has probably been asked many times before, but I didn't > see it mentioned anywhere on the systemd web site. > > I want to create a unit file for a service where the server program > requires an argument or environment value that has to be computed at > run time; it isn't known in advance. For example, suppose the server > requires the numeric UID value corresponding to some particular > username, passed as an argument or an environment value. > > In a SysV-type shell script, I could simply do: > > exec /path/to/server_program `id -u username` > > or > > export USERID=`id -u username` > exec /path/to/server_program > > Neither of these is possible in a systemd service unit file. So what > is the best way to accomplish the same result? > > All I have been able to think of is to have ExecStart= run a shell > script that computes the necessary values and then execs the actual > server program. Is there a better way?
If services need such some pre-invocation scripting logic to set up configuration because they can't do this on their own, I'd always recommend such a simple wrapper script, just make sure to use "exec" in the end to invoke the real binary. One shouldn't try to shoehorn something where one really would like to use a real shell script into systemd ExecStart= lines... Of course, I think it would be best if services can handle their own configuration directly, but if they can't there's really nothing wrong with wrapping it in a script that adds that. Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel