从命令行使用 systemctl 创建新的 systemd 单元/服务/计时器/套接字?

rug*_*ugk 5 systemd services systemd-unit systemctl

鉴于 CLI 工具systemctl edit可用于编辑现有的 systemd 单元,例如服务、计时器、套接字、设备、挂载、自动挂载、目标、交换、路径、切片、范围或 nspawn 文件,并且您还有另一个可以删除/重置 systemd 单元的子命令我也可以像这样创建一个新的 systemctl 文件吗?

\n

大多数在线指南都会告诉您使用一些自定义文本编辑器并将文件放置在某个位置(您首先需要找到正确的 systemd 目录,再次\xe2\x80\xa6)。\n此外,如果您复制,则需要重新加载守护进程手动通过文件systemctl daemon-reload

\n

然而,作为系统管理员,我可能会在默认位置快速创建一个新单元,就像systemctl edit编辑/覆盖现有条目一样。\n我只是喜欢它如何将我直接弹出到我最喜欢的 CLI 文本编辑器(nano 左右)中,并且我可以立即编辑我的内容。

\n

我尝试systemctl add过并且systemctl create,但这两个命令都不存在。

\n

我在网上没有找到该信息,也没有在此处找到任何 Stackexchange 答案\xe2\x80\xa6

\n

rug*_*ugk 6

实际上,如果你尝试运行systemctl edit尚不存在的新服务运行该命令,它会准确地告诉您要做什么:

\n
$ systemctl edit happy-unicorns.service\nNo files found for happy-unicorns.service.\nRun \xe2\x80\x98systemctl edit --force --full happy-unicorns.service\' to create a new unit.\n
Run Code Online (Sandbox Code Playgroud)\n

这样就创建了一个新的系统单元(在本例中是一个服务),实际上只需运行:

\n
$ systemctl edit --force --full happy-unicorns.service\n
Run Code Online (Sandbox Code Playgroud)\n

它会很高兴地弹出您的文本编辑器(可以通过设置环境变量来指定该编辑器)$EDITOR就像 Linux 工具的常见操作一样)。

\n

含义:

\n
    \n
  • --full 将编辑整个单元文件,而不仅仅是创建覆盖。\n这意味着,在我们的示例中,它将实际上在正确的位置使用完整的服务文件,而/etc/systemd/system/.#happy-unicorns.service11738733f89dc655不是为例如中的服务创建目录和覆盖/etc/systemd/system/happy-unicorns.service.d/.#override.conf98be493089631328
    \n注意:您会看到 systemctl 附加了一些随机数并将文件标记为临时文件,以便不直接应用更改。它们仍然经过健全性检查,并且当一切正确时文件将被移动。
  • \n
  • --force实际上需要指定创建一个新文件而不是编辑现有文件。
  • \n
  • 如果您想通过添加常用开关在其他位置(即用户或全局范围)创建文件:您可以--user为所有用户添加当前用户--global--system对于当前系统来说是默认值。
  • \n
\n

我同意它可能不是那么容易找到,因为它\xe2\x80\x99s不是一个单独的子命令,但是当你想到只编辑任何文件并让systemctl决定它是否\xe2\x80\时,它就很有意义了x99s 一个已存在或不存在的文件。

\n

另请参阅systemctl手册页以获取更多信息。

\n