如何将多行内容捕获到systemd单元文件中的文件?

时间:2015-08-27 12:20:34

标签: systemd

我正在尝试将文件写入磁盘,作为systemd单元文件的ExecStartPre命令的一部分。

这就是我正在使用的:

[Unit]
Description=My service

[Service]
Restart=always
StartLimitInterval=0
ExecStartPre=/usr/bin/cat <<EOFDefaults > /tmp/test
option1=value1
option2=value2
EOFDefaults

ExecStart=/run/some/command

由于这是一个多行命令,因此在使用systemd-analyze verify myservice.service进行测试时会出现以下错误。

所以,我试图逃避多行:

[Unit]
Description=My service

[Service]
Restart=always
StartLimitInterval=0
ExecStartPre=/usr/bin/cat <<EOFDefaults > /tmp/test \
option1=value1 \
option2=value2 \
EOFDefaults

ExecStart=/run/some/command

测试单元文件时,出现以下错误:Invalid escape sequences in command line:

如何使用cat将多行内容作为systemd单元文件命令的一部分写入文件?

1 个答案:

答案 0 :(得分:2)

你不是。 请参阅Command lines上的文档部分:

  

此语法旨在与shell语法非常相似,但只能理解以下段落中描述的元字符和扩展。具体来说,使用&#34;&lt;&#34;,&#34;&lt;&lt;&#;&#34;,&#34;&gt;&#34;和&#34;&gt;&gt;&#重定向34;,管道使用&#34; |&#34;,使用&#34;&amp;&#34;在后台运行程序,以及shell语法的其他元素不受支持。

您可以通过首先使用以下内容调用shell来完成此操作:

    ExecStartPre=/bin/sh -c '/usr/bin/cat <<EOFDefaults > /tmp/test \
    option1=value1 \
    option2=value2 \
    EOFDefaults'

然而它变得非常混乱。

我要做的是将它放在一个单独的shell脚本中,并从服务定义中调用它。一般情况下,最好尽量保持服务定义。