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

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

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

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

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

我尝试了systemctl addsystemctl create,但这两个命令都不存在。

我没有在网上找到该信息,也没有在这里找到任何 Stackexchange 答案......

答案1

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

$ systemctl edit happy-unicorns.service
No files found for happy-unicorns.service.
Run ‘systemctl edit --force --full happy-unicorns.service' to create a new unit.

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

$ systemctl edit --force --full happy-unicorns.service

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

含义:

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

我同意它可能不是那么明显,因为它不是一个单独的子命令,但是当您想到编辑任何文件并让 systemctl 决定它是否是一个已经存在的文件时,它就非常有意义。

另请参阅systemctl手册页了解更多信息。

相关内容