manager: add DefaultEnvironment option
This complements existing functionality of setting variables through 'systemctl set-environment', the kernel command line, and through normal environment variables for systemd in session mode.
This commit is contained in:
parent
8c1396b1c2
commit
97d0e5f83b
|
@ -262,6 +262,27 @@
|
||||||
too.</para></listitem>
|
too.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>DefaultEnvironment=</varname></term>
|
||||||
|
|
||||||
|
<listitem><para>Sets systemd manager
|
||||||
|
environment variables for executed
|
||||||
|
processes. Takes a space-separated
|
||||||
|
list of variable assignments.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>Example:
|
||||||
|
<programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</programlisting>
|
||||||
|
gives three variables <literal>VAR1</literal>,
|
||||||
|
<literal>VAR2</literal>, <literal>VAR3</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
See
|
||||||
|
<citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
|
||||||
|
for details about environment variables.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>DefaultLimitCPU=</varname></term>
|
<term><varname>DefaultLimitCPU=</varname></term>
|
||||||
<term><varname>DefaultLimitFSIZE=</varname></term>
|
<term><varname>DefaultLimitFSIZE=</varname></term>
|
||||||
|
|
|
@ -288,8 +288,9 @@
|
||||||
variables is reset, all prior
|
variables is reset, all prior
|
||||||
assignments have no effect.
|
assignments have no effect.
|
||||||
Variable expansion is not performed
|
Variable expansion is not performed
|
||||||
inside the strings, and $ has no special
|
inside the strings, however, specifier
|
||||||
meaning.
|
expansion is possible. $ character has
|
||||||
|
no special meaning.
|
||||||
If you need to assign a value containing spaces
|
If you need to assign a value containing spaces
|
||||||
to a variable, use double quotes (")
|
to a variable, use double quotes (")
|
||||||
for the assignment.</para>
|
for the assignment.</para>
|
||||||
|
|
|
@ -1564,7 +1564,7 @@ int config_parse_environ(const char *unit,
|
||||||
assert(filename);
|
assert(filename);
|
||||||
assert(lvalue);
|
assert(lvalue);
|
||||||
assert(rvalue);
|
assert(rvalue);
|
||||||
assert(u);
|
assert(data);
|
||||||
|
|
||||||
if (isempty(rvalue)) {
|
if (isempty(rvalue)) {
|
||||||
/* Empty assignment resets the list */
|
/* Empty assignment resets the list */
|
||||||
|
@ -1573,7 +1573,11 @@ int config_parse_environ(const char *unit,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
k = unit_full_printf(u, rvalue);
|
if (u)
|
||||||
|
k = unit_full_printf(u, rvalue);
|
||||||
|
else
|
||||||
|
k = strdup(rvalue);
|
||||||
|
|
||||||
if (!k)
|
if (!k)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,7 @@ static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL;
|
||||||
static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
|
static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
|
||||||
static usec_t arg_runtime_watchdog = 0;
|
static usec_t arg_runtime_watchdog = 0;
|
||||||
static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
|
static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
|
||||||
|
static char **arg_default_environment = NULL;
|
||||||
static struct rlimit *arg_default_rlimit[RLIMIT_NLIMITS] = {};
|
static struct rlimit *arg_default_rlimit[RLIMIT_NLIMITS] = {};
|
||||||
static uint64_t arg_capability_bounding_set_drop = 0;
|
static uint64_t arg_capability_bounding_set_drop = 0;
|
||||||
static nsec_t arg_timer_slack_nsec = (nsec_t) -1;
|
static nsec_t arg_timer_slack_nsec = (nsec_t) -1;
|
||||||
|
@ -646,6 +647,7 @@ static int parse_config_file(void) {
|
||||||
{ "Manager", "ShutdownWatchdogSec", config_parse_sec, 0, &arg_shutdown_watchdog },
|
{ "Manager", "ShutdownWatchdogSec", config_parse_sec, 0, &arg_shutdown_watchdog },
|
||||||
{ "Manager", "CapabilityBoundingSet", config_parse_bounding_set, 0, &arg_capability_bounding_set_drop },
|
{ "Manager", "CapabilityBoundingSet", config_parse_bounding_set, 0, &arg_capability_bounding_set_drop },
|
||||||
{ "Manager", "TimerSlackNSec", config_parse_nsec, 0, &arg_timer_slack_nsec },
|
{ "Manager", "TimerSlackNSec", config_parse_nsec, 0, &arg_timer_slack_nsec },
|
||||||
|
{ "Manager", "DefaultEnvironment", config_parse_environ, 0, &arg_default_environment },
|
||||||
{ "Manager", "DefaultLimitCPU", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_CPU]},
|
{ "Manager", "DefaultLimitCPU", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_CPU]},
|
||||||
{ "Manager", "DefaultLimitFSIZE", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_FSIZE]},
|
{ "Manager", "DefaultLimitFSIZE", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_FSIZE]},
|
||||||
{ "Manager", "DefaultLimitDATA", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_DATA]},
|
{ "Manager", "DefaultLimitDATA", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_DATA]},
|
||||||
|
@ -1630,6 +1632,9 @@ int main(int argc, char *argv[]) {
|
||||||
if (arg_default_controllers)
|
if (arg_default_controllers)
|
||||||
manager_set_default_controllers(m, arg_default_controllers);
|
manager_set_default_controllers(m, arg_default_controllers);
|
||||||
|
|
||||||
|
if (arg_default_environment)
|
||||||
|
manager_set_default_environment(m, arg_default_environment);
|
||||||
|
|
||||||
manager_set_show_status(m, arg_show_status);
|
manager_set_show_status(m, arg_show_status);
|
||||||
|
|
||||||
/* Remember whether we should queue the default job */
|
/* Remember whether we should queue the default job */
|
||||||
|
|
|
@ -2570,6 +2570,18 @@ void manager_undo_generators(Manager *m) {
|
||||||
remove_generator_dir(m, &m->generator_unit_path_late);
|
remove_generator_dir(m, &m->generator_unit_path_late);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int manager_set_default_environment(Manager *m, char **environment) {
|
||||||
|
|
||||||
|
char **e = NULL;
|
||||||
|
assert(m);
|
||||||
|
e = strv_env_merge(2, m->environment, environment);
|
||||||
|
if (!e)
|
||||||
|
return -ENOMEM;
|
||||||
|
strv_free(m->environment);
|
||||||
|
m->environment = e;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int manager_set_default_controllers(Manager *m, char **controllers) {
|
int manager_set_default_controllers(Manager *m, char **controllers) {
|
||||||
char **l;
|
char **l;
|
||||||
|
|
||||||
|
|
|
@ -272,6 +272,7 @@ unsigned manager_dispatch_load_queue(Manager *m);
|
||||||
unsigned manager_dispatch_run_queue(Manager *m);
|
unsigned manager_dispatch_run_queue(Manager *m);
|
||||||
unsigned manager_dispatch_dbus_queue(Manager *m);
|
unsigned manager_dispatch_dbus_queue(Manager *m);
|
||||||
|
|
||||||
|
int manager_set_default_environment(Manager *m, char **environment);
|
||||||
int manager_set_default_controllers(Manager *m, char **controllers);
|
int manager_set_default_controllers(Manager *m, char **controllers);
|
||||||
int manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit);
|
int manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit);
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#ShutdownWatchdogSec=10min
|
#ShutdownWatchdogSec=10min
|
||||||
#CapabilityBoundingSet=
|
#CapabilityBoundingSet=
|
||||||
#TimerSlackNSec=
|
#TimerSlackNSec=
|
||||||
|
#DefaultEnvironment=
|
||||||
#DefaultLimitCPU=
|
#DefaultLimitCPU=
|
||||||
#DefaultLimitFSIZE=
|
#DefaultLimitFSIZE=
|
||||||
#DefaultLimitDATA=
|
#DefaultLimitDATA=
|
||||||
|
|
Loading…
Reference in a new issue