[systemd-commits] 4 commits - man/sysctl.d.xml man/systemd.service.xml rules/99-systemd.rules.in TODO
Zbigniew JÄdrzejewski-Szmek
zbyszek at kemper.freedesktop.org
Tue Oct 7 06:23:53 PDT 2014
TODO | 8 +
man/sysctl.d.xml | 2
man/systemd.service.xml | 314 ++++++++++++++++++++++++----------------------
rules/99-systemd.rules.in | 2
4 files changed, 174 insertions(+), 152 deletions(-)
New commits:
commit 1b600437bac3c0676cc72f589909c4cbfe38ba10
Author: Zbigniew JÄdrzejewski-Szmek <zbyszek at in.waw.pl>
Date: Tue Oct 7 02:02:59 2014 -0400
/proc/sys prefixes are not necessary for sysctl anymore
diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml
index 5529fc9..3002ebd 100644
--- a/man/sysctl.d.xml
+++ b/man/sysctl.d.xml
@@ -158,7 +158,7 @@
<para><filename>/etc/udev/rules.d/99-bridge.rules</filename>:
</para>
- <programlisting>ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"
+ <programlisting>ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/bridge"
</programlisting>
<para><filename>/etc/sysctl.d/bridge.conf</filename>:
diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
index aa435c4..e30d9a8 100644
--- a/rules/99-systemd.rules.in
+++ b/rules/99-systemd.rules.in
@@ -52,7 +52,7 @@ SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:
# Apply sysctl variables to network devices (and only to those) as they appear.
-ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name"
+ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sysctl --prefix=/net/ipv4/conf/$name --prefix=/net/ipv4/neigh/$name --prefix=/net/ipv6/conf/$name --prefix=/net/ipv6/neigh/$name"
# Pull in backlight save/restore for all backlight devices and
# keyboard backlights
commit d19e85f0d474ed1882561b458d528cbae49f640e
Author: Zbigniew JÄdrzejewski-Szmek <zbyszek at in.waw.pl>
Date: Tue Oct 7 09:11:03 2014 -0400
Update TODO
diff --git a/TODO b/TODO
index 0c648f9..10baa1c 100644
--- a/TODO
+++ b/TODO
@@ -10,6 +10,14 @@ Bugfixes:
* properly handle .mount unit state tracking when two mount points are stacked one on top of another on the exact same mount point.
+After killing 'systemd --user', systemctl restart user at ... fails.
+
+ExecStart with unicode characters fails in strv_split_quoted:
+
+ [Service]
+ Environment=ONE='one' "TWO='two two' too" THREE=
+ ExecStart=/bin/python3 -c 'import sys;print(sys.argv)' $ONE $TWO $THREE
+
External:
* Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros.
commit 5d9a2698e74eefc20ea7cbbaeaffb566e398f2ba
Author: Zbigniew JÄdrzejewski-Szmek <zbyszek at in.waw.pl>
Date: Tue Oct 7 09:19:41 2014 -0400
man: document stripping of quotes
diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index dbc82ed..50ff2f5 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -1215,13 +1215,39 @@
contains, resulting in a single argument. Use
<literal>$FOO</literal> as a separate word on the
command line, in which case it will be replaced by the
- value of the environment variable split at whitespace,
- resulting in zero or more arguments. To pass a literal
- dollar sign, use <literal>$$</literal>. Variables
- whose value is not known at expansion time are treated
- as empty strings. Note that the first argument
- (i.e. the program to execute) may not be a
- variable.</para>
+ value of the environment variable split at whitespace
+ resulting in zero or more arguments. For this type of
+ expansion, quotes and respected when splitting into
+ words, and afterwards removed.</para>
+
+ <para>Example:</para>
+
+ <programlisting>Environment="ONE=one" 'TWO=two two'
+ExecStart=/bin/echo $ONE $TWO ${TWO}</programlisting>
+
+ <para>This will execute <command>/bin/echo</command>
+ with four arguments: <literal>one</literal>,
+ <literal>two</literal>, <literal>two</literal>, and
+ <literal>two two</literal>.</para>
+
+ <para>Example:</para>
+ <programlisting>Environment=ONE='one' "TWO='two two' too" THREE=
+ExecStart=/bin/echo ${ONE} ${TWO} ${THREE}
+ExecStart=/bin/echo $ONE $TWO $THREE</programlisting>
+ <para>This results in <filename>echo</filename> being
+ called twice, the first time with arguments
+ <literal>'one'</literal>,
+ <literal>'two two' too</literal>, <literal></literal>,
+ and the second time with arguments
+ <literal>one</literal>, <literal>two two</literal>,
+ <literal>too</literal>.
+ </para>
+
+ <para>To pass a literal dollar sign, use
+ <literal>$$</literal>. Variables whose value is not
+ known at expansion time are treated as empty
+ strings. Note that the first argument (i.e. the
+ program to execute) may not be a variable.</para>
<para>Variables to be used in this fashion may be
defined through <varname>Environment=</varname> and
@@ -1259,16 +1285,6 @@
<literal>>/dev/null</literal>,
<literal>&</literal>, <literal>;</literal>, and
<literal>/bin/ls</literal>.</para>
-
- <para>Example:</para>
-
- <programlisting>Environment="ONE=one" 'TWO=two two'
-ExecStart=/bin/echo $ONE $TWO ${TWO}</programlisting>
-
- <para>This will execute <command>/bin/echo</command>
- with four arguments: <literal>one</literal>,
- <literal>two</literal>, <literal>two</literal>, and
- <literal>two two</literal>.</para>
</refsect1>
<refsect1>
commit 30d88d54f613f9f7831172876ebfd9e285fb043b
Author: Zbigniew JÄdrzejewski-Szmek <zbyszek at in.waw.pl>
Date: Tue Oct 7 09:19:24 2014 -0400
man: move commandline parsing to a separate section
It is very long already, and obscures the description of
ExecStart, and it is about to get longer.
diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index b9a2f8d..dbc82ed 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -352,72 +352,59 @@
<term><varname>ExecStart=</varname></term>
<listitem><para>Commands with their
arguments that are executed when this
- service is started. For each of the
- specified commands, the first argument
- must be an absolute and literal path
- to an executable.</para>
+ service is started. The value is split
+ into zero or more command lines is
+ according to the rules described below
+ (see section "Command Lines" below).
+ </para>
<para>When <varname>Type</varname> is
not <option>oneshot</option>, only one
command may and must be given. When
<varname>Type=oneshot</varname> is
- used, none or more than one command
- may be specified. Multiple command
- lines may be concatenated in a single
- directive by separating them with
- semicolons (these semicolons must be
- passed as separate
- words). Alternatively, this directive
- may be specified more than once with
- the same effect. Lone semicolons may
- be escaped as
- <literal>\;</literal>. If the empty
- string is assigned to this option, the
- list of commands to start is reset,
- prior assignments of this option will
- have no effect. If no
+ used, zero or more commands may be
+ specified. This can be specified by
+ providing multiple command lines in
+ the same directive , or alternatively,
+ this directive may be specified more
+ than once with the same effect. If the
+ empty string is assigned to this
+ option, the list of commands to start
+ is reset, prior assignments of this
+ option will have no effect. If no
<varname>ExecStart=</varname> is
specified, then the service must have
<varname>RemainAfterExit=yes</varname>
set.</para>
- <para>Each command line is split on
- whitespace, with the first item being
- the command to execute, and the
- subsequent items being the arguments.
- Double quotes ("...") and single
- quotes ('...') may be used, in which
- case everything until the next
- matching quote becomes part of the
- same argument. Quotes themselves are
- removed after parsing. In addition, a
- trailing backslash
- (<literal>\</literal>) may be used to
- merge lines. This syntax is intended
- to be very similar to shell syntax,
- but only the meta-characters and
- expansions described in the following
- paragraphs are understood.
- Specifically, redirection using
- <literal><</literal>,
- <literal><<</literal>,
- <literal>></literal>, and
- <literal>>></literal>, pipes
- using <literal>|</literal>, and
- running programs in the background
- using <literal>&</literal>
- and <emphasis>other elements of shell
- syntax are not supported</emphasis>.
- </para>
+ <para>For each of the specified
+ commands, the first argument must be
+ an absolute and literal path to an
+ executable. Optionally, if the
+ absolute file name is prefixed with
+ <literal>@</literal>, the second token
+ will be passed as
+ <literal>argv[0]</literal> to the
+ executed process, followed by the
+ further arguments specified. If the
+ absolute filename is prefixed with
+ <literal>-</literal>, an exit code of
+ the command normally considered a
+ failure (i.e. non-zero exit status or
+ abnormal exit due to signal) is
+ ignored and considered success. If
+ both <literal>-</literal> and
+ <literal>@</literal> are used, they
+ can appear in either order.</para>
<para>If more than one command is
specified, the commands are invoked
sequentially in the order they appear
in the unit file. If one of the
commands fails (and is not prefixed
- with <literal>-</literal>), other lines
- are not executed, and the unit is
- considered failed.</para>
+ with <literal>-</literal>), other
+ lines are not executed, and the unit
+ is considered failed.</para>
<para>Unless
<varname>Type=forking</varname> is
@@ -425,106 +412,6 @@
command line will be considered the
main process of the daemon.</para>
- <para>The command line accepts
- <literal>%</literal> specifiers as
- described in
- <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
- Note that the first argument of the
- command line (i.e. the program to
- execute) may not include
- specifiers.</para>
-
- <para>Basic environment variable
- substitution is supported. Use
- <literal>${FOO}</literal> as part of a
- word, or as a word of its own, on the
- command line, in which case it will be
- replaced by the value of the
- environment variable including all
- whitespace it contains, resulting in a
- single argument. Use
- <literal>$FOO</literal> as a separate
- word on the command line, in which
- case it will be replaced by the value
- of the environment variable split at
- whitespace, resulting in zero or more
- arguments. To pass a literal dollar
- sign, use <literal>$$</literal>.
- Variables whose value is not known at
- expansion time are treated as empty
- strings. Note that the first argument
- (i.e. the program to execute) may not
- be a variable.</para>
-
- <para>Variables to be used in this
- fashion may be defined through
- <varname>Environment=</varname> and
- <varname>EnvironmentFile=</varname>.
- In addition, variables listed in the
- section "Environment variables in
- spawned processes" in
- <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- which are considered "static
- configuration", may be used (this includes
- e.g. <varname>$USER</varname>, but not
- <varname>$TERM</varname>).</para>
-
- <para>Optionally, if the absolute file
- name is prefixed with
- <literal>@</literal>, the second token
- will be passed as
- <literal>argv[0]</literal> to the
- executed process, followed by the
- further arguments specified. If the
- absolute filename is prefixed with
- <literal>-</literal>, an exit code of
- the command normally considered a
- failure (i.e. non-zero exit status or
- abnormal exit due to signal) is ignored
- and considered success. If both
- <literal>-</literal> and
- <literal>@</literal> are used, they
- can appear in either order.</para>
-
- <para>Note that this setting does not
- directly support shell command
- lines. If shell command lines are to
- be used, they need to be passed
- explicitly to a shell implementation
- of some kind. Example:</para>
- <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'</programlisting>
- <para>Example:</para>
- <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"</programlisting>
- <para>This will execute
- <command>/bin/echo</command> two
- times, each time with one argument:
- <literal>one</literal> and
- <literal>two two</literal>,
- respectively. Because two commands are
- specified,
- <varname>Type=oneshot</varname> must
- be used.</para>
-
- <para>Example:</para>
- <programlisting>ExecStart=/bin/echo / >/dev/null & \; \
-/bin/ls</programlisting>
- <para>This will execute
- <command>/bin/echo</command> with five
- arguments: <literal>/</literal>,
- <literal>>/dev/null</literal>,
- <literal>&</literal>,
- <literal>;</literal>, and
- <literal>/bin/ls</literal>.</para>
-
- <para>Example:</para>
- <programlisting>Environment="ONE=one" 'TWO=two two'
-ExecStart=/bin/echo $ONE $TWO ${TWO}</programlisting>
- <para>This will execute
- <command>/bin/echo</command> with four
- arguments: <literal>one</literal>,
- <literal>two</literal>,
- <literal>two</literal>, and
- <literal>two two</literal>.</para>
</listitem>
</varlistentry>
@@ -1274,6 +1161,117 @@ ExecStart=/bin/echo $ONE $TWO ${TWO}</programlisting>
</refsect1>
<refsect1>
+ <title>Command lines</title>
+
+ <para>This section describes command line parsing and
+ variable and specifier substitions for
+ <varname>ExecStart=</varname>,
+ <varname>ExecStartPre=</varname>,
+ <varname>ExecStartPost=</varname>,
+ <varname>ExecReload=</varname>,
+ <varname>ExecStop=</varname>, and
+ <varname>ExecStopPost=</varname> options.</para>
+
+ <para>Multiple command lines may be concatenated in a
+ single directive by separating them with semicolons
+ (these semicolons must be passed as separate words).
+ Lone semicolons may be escaped as
+ <literal>\;</literal>.</para>
+
+ <para>Each command line is split on whitespace, with
+ the first item being the command to execute, and the
+ subsequent items being the arguments. Double quotes
+ ("...") and single quotes ('...') may be used, in
+ which case everything until the next matching quote
+ becomes part of the same argument. Quotes themselves
+ are removed after parsing. In addition, a trailing
+ backslash (<literal>\</literal>) may be used to merge
+ lines. </para>
+
+ <para>This syntax is intended to be very similar to
+ shell syntax, but only the meta-characters and
+ expansions described in the following paragraphs are
+ understood. Specifically, redirection using
+ <literal><</literal>, <literal><<</literal>,
+ <literal>></literal>, and
+ <literal>>></literal>, pipes using
+ <literal>|</literal>, running programs in the
+ background using <literal>&</literal>, and
+ <emphasis>other elements of shell syntax are not
+ supported</emphasis>.</para>
+
+ <para>The command line accepts <literal>%</literal>
+ specifiers as described in
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ Note that the first argument of the command line
+ (i.e. the program to execute) may not include
+ specifiers.</para>
+
+ <para>Basic environment variable substitution is
+ supported. Use <literal>${FOO}</literal> as part of a
+ word, or as a word of its own, on the command line, in
+ which case it will be replaced by the value of the
+ environment variable including all whitespace it
+ contains, resulting in a single argument. Use
+ <literal>$FOO</literal> as a separate word on the
+ command line, in which case it will be replaced by the
+ value of the environment variable split at whitespace,
+ resulting in zero or more arguments. To pass a literal
+ dollar sign, use <literal>$$</literal>. Variables
+ whose value is not known at expansion time are treated
+ as empty strings. Note that the first argument
+ (i.e. the program to execute) may not be a
+ variable.</para>
+
+ <para>Variables to be used in this fashion may be
+ defined through <varname>Environment=</varname> and
+ <varname>EnvironmentFile=</varname>. In addition,
+ variables listed in the section "Environment variables
+ in spawned processes" in
+ <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ which are considered "static configuration", may be
+ used (this includes e.g. <varname>$USER</varname>, but
+ not <varname>$TERM</varname>).</para>
+
+ <para>Note that shell command lines are not directly
+ supported. If shell command lines are to be used, they
+ need to be passed explicitly to a shell implementation
+ of some kind. Example:</para>
+ <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'</programlisting>
+
+ <para>Example:</para>
+
+ <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"</programlisting>
+
+ <para>This will execute <command>/bin/echo</command>
+ two times, each time with one argument:
+ <literal>one</literal> and <literal>two two</literal>,
+ respectively. Because two commands are specified,
+ <varname>Type=oneshot</varname> must be used.</para>
+
+ <para>Example:</para>
+
+ <programlisting>ExecStart=/bin/echo / >/dev/null & \; \
+/bin/ls</programlisting>
+
+ <para>This will execute <command>/bin/echo</command>
+ with five arguments: <literal>/</literal>,
+ <literal>>/dev/null</literal>,
+ <literal>&</literal>, <literal>;</literal>, and
+ <literal>/bin/ls</literal>.</para>
+
+ <para>Example:</para>
+
+ <programlisting>Environment="ONE=one" 'TWO=two two'
+ExecStart=/bin/echo $ONE $TWO ${TWO}</programlisting>
+
+ <para>This will execute <command>/bin/echo</command>
+ with four arguments: <literal>one</literal>,
+ <literal>two</literal>, <literal>two</literal>, and
+ <literal>two two</literal>.</para>
+ </refsect1>
+
+ <refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
More information about the systemd-commits
mailing list