鉴于 CLI 工具systemctl edit
可用于编辑现有的 systemd 单元,例如服务、计时器、套接字、设备、挂载、自动挂载、目标、交换、路径、切片、范围或 nspawn 文件,以及您还有另一个可以删除/重置 systemd 单元的子命令我也可以像这样创建一个新的 systemctl 文件吗?
大多数在线指南都会告诉您使用一些自定义文本编辑器并将文件放置在某个位置(您首先需要在其中再次找到正确的 systemd 目录......)。此外,如果您通过 手动复制文件,则需要重新加载守护进程systemctl daemon-reload
。
然而,作为系统管理员,我可能只是在默认位置快速创建一个新单元,就像systemctl edit
编辑/覆盖现有条目一样。我只是喜欢它如何将我直接弹出到我最喜欢的 CLI 文本编辑器(nano 左右)中,并且我可以立即编辑我的内容。
我尝试了systemctl add
和systemctl 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
手册页了解更多信息。