[systemd-devel] Best way of configuring service
Dan Tihelka
dtihelka at gmail.com
Sun Sep 23 14:04:39 PDT 2012
Dear all,
I porting the start scripts of cruisecontrol system to the native systemd
service configuration. It goes quiet well, the only "trouble" I have with the
options configuration.
Since cruisecontrol is written in Java, there are two ways of how to configure
the daemon (and CC use them both): -D java properties and "classic" command
line options passed to the main jar.
I want to have the whole service highly configurable, So I have decided to
define Environment= item for each particular option. The result looks like:
Environment=cc.prop.item1="-Dcc.XXX=value1"
Environment=cc.prop.item2="-Dcc.XXX=value1"
Environment=cc.prop.item3="-Dcc.XXX=value1"
Environment=cc.prop.item4=
Environment=cc.prop.item5=
Environment=cc.opt.item1=-opt1 val1
Environment=cc.opt.item2=-opt2 val2
Environment=cc.opt.item3=-opt3 val3
Environment=cc.opt.item4=
Environment=cc.opt.item4=
Environment=cc.install.dir=/usr/shared/cruisecontrol
Where those undefined are left for user to be able to override the
configuration, since they MUST appear in the ExecStart= item which looks like:
ExecStart=/usr/bin/java -Dcc.install.dir=-Dcc.install.dir${cc.install.dir} -cp
${cc.install.dir}/dist $cc.prop.item1 $cc.prop.item2 ... $cc.prop.item5
-jar cruisecontrol-launcher.jar $cc.opt.item1
$cc.opt.item2 ... $cc.opt.item5
In this way, the user should be able to customize everything in
/etc/systemd/system/ configuration, simply re-defining the appropriate
Environment definitions.
However, there are two issues Iike to clarify:
1)
As you could see, one variable is used in two cases - particularly it is:
-Dcc.install.dir=-Dcc.install.dir${cc.install.dir} -cp ${cc.install.dir}/dist
I have observed that the env must be used in form ${XXX} when it is the part
of larger string (despite the form ${XXX} having its "special" meaning).
So the question is: do I it right? Is the concept I have chosen correct?
2)
The second issue is that (if I understand it right) everything I define by
Environment= will appear in ENV variables of the process started. Is is true?
What If I don't want to export those variables to the service? I would guess
that it is the reason why -D properties are used instead of "raw" ENV
variables (which could simply be used as well)
Also, I have found the inability to resolve env definitions in other env
definitions being quiet limiting (although I suppose that some others are
complaining as well :-)) ).
So, I would like to ask you for your advice - what is the best way of handling
those two issues? What do you recommend to daemon upstream developers?
It seems to me that the purpose of ENV variables is slightly bit different from
using as constant definitions for ExecStart= command simplification (even shell
does not export them unless explicitly told, doesn't it). Although I may be
completely wrong.
Thank you and I wish you many happy system admins (anyway, I see systemd as
the best init system with the highest potential).
Best regards,
Dan
More information about the systemd-devel
mailing list