https://unix.stackexchange.com/a/197682/674说
默认情况下所有服务都是“禁用”的; “启用”是选择加入。
这是对的吗?
我跑完之后
sudo apt install openssh-server
为什么会sshd
自动运行?
如果一个服务是由systemd自动启动的,如何更改默认不启动它?
现在我已经安装了桑巴舞服务器和网络文件系统服务器,我是否需要要求 systemd 默认禁用它们(这样它们就不会在每次启动 Lubuntu 时自动启动)?如果是,怎么办?
谢谢。
答案1
默认情况下所有服务都是“禁用”的; “启用”是选择加入。
这是对的吗?
是的,如果您在磁盘上创建一个单元文件,您仍然需要为 systemd 运行一些命令来了解新单元 ( systemctl daemon-reload
)、立即启动它 ( systemctl start ...
)、请求它在启动时启动 ( systemctl enable ...
) 或使用快捷键 ( systemctl enable --now ...
.)同时启用和启动它
但是,当您安装包含 systemd 单元的软件包时,该软件包通常会作为安装后脚本的一部分为您运行大部分命令。
我跑完之后
sudo apt install openssh-server
为什么sshd会自动运行?
因此,该软件包的安装后脚本将启用它并在安装后运行该软件包。
你提到你在 Lubuntu。基于 Debian 的发行版(通常使用apt-get
或apt
),例如 Debian 本身、Ubuntu、Lubuntu 及其其他变体,传统上在安装软件包后立即启动并启用软件包。他们的理念是提供理智且“安全”的默认设置,允许启动服务并使其开箱即用。 (“安全”有时意味着不接受除本地主机之外的连接,或者有时将身份验证限制为仅强形式的身份验证,例如基于密钥的身份验证。)
基于 Red Hat 的系统(RHEL、CentOS、Fedora,我认为 SuSE 也是如此)通常会执行相反的操作,并要求管理员在安装软件包后显式启用并启动守护进程,以便他们有机会检查其守护进程在第一次启动之前进行配置。
systemd 创建了一种机制来围绕启用和初始化,它考虑了这方面特定于发行版的策略,称为预设。
该机制允许打包者简单地从安装后脚本中调用systemctl preset ...
,因此他们无需担心发行版的特定策略。
基于 Debian 的发行版将推送一个*.preset
包含该行的文件enable *
,该文件将实现默认启用所有内容的策略,而基于 Red Hat 的发行版则提供一个*.preset
文件来disable *
实现其首选项。
除了使这种特定于发行版的设置背后的机制在各个发行版之间保持一致之外,systemd 预设还为管理员提供了一种简单且统一的方式来自定义这些设置,为特定包选择不同的预设或完全覆盖发行版的原始选择。
实际上,基于 Debian 的发行版最终不会使用systemctl preset
直接地,相反,他们在其周围提供了一个小包装器,这就是他们在软件包的安装后脚本中使用的内容。使用包装器的原因是在卸载软件包时记录该软件包的启用模式,以便保留它,以防将来在同一主机上再次安装该软件包。 systemd 预设配置在这些主机上仍然照常工作,因此这个小细节在很大程度上可以被忽略。