gpt4 book ai didi

systemd - 如何将多行内容转换为 systemd 单元文件中的文件?

转载 作者:行者123 更新时间:2023-12-01 12:32:31 29 4
gpt4 key购买 nike

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

这就是我正在使用的:

[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:
作为 systemd 单元文件命令的一部分,如何使用 cat 将多行内容写入文件?

最佳答案

你没有。
请参阅 Command 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 "<", "<<", ">", and ">>", pipes using "|", running programs in the background using "&", and other elements of shell syntax are not supported.



您可以通过首先使用以下内容调用 shell 来执行此操作:
    ExecStartPre=/bin/sh -c '/usr/bin/cat <<EOFDefaults > /tmp/test \
option1=value1 \
option2=value2 \
EOFDefaults'

然而,它很快就会变得杂乱无章。

我会做的是将它放在一个单独的 shell 脚本中,并从服务定义中调用它。一般来说,最好保持服务定义尽可能清晰。

关于systemd - 如何将多行内容转换为 systemd 单元文件中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32249242/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com