Debian/Ubuntu - 防止服务在安装时启动和启用

Debian/Ubuntu - 防止服务在安装时启动和启用

我喜欢将 Debian 或 Ubuntu 设置为服务器,并且在配置它们之前必须安装许多应用程序。有时,我安装应用程序只是为了以后需要时可以选择使用它。

我不希望自动启用和启动这些应用程序。这会产生问题,特别是如果它们的设置尚未更改并且与其他应用程序存在冲突。

例如我安装了以下软件:apt install nginx apache2 lighttpd

当我重新启动时,Nginx 正在侦听端口 80,配置错误且不安全,我必须禁用它。

在此输入图像描述

我禁用它并重新启动,现在看看谁接管了端口:

在此输入图像描述

如果我禁用lighttpd,Apache2 将取代它。

这没有意义,我觉得我正在与我安装的应用程序作斗争......有什么方法可以让它停止吗?有什么方法可以禁用在安装时启用和启动服务的这种行为吗?

编辑

找到了防止自动启动的解决方案:

echo exit 101 > /usr/sbin/policy-rc.d
chmod +x /usr/sbin/policy-rc.d

找到了防止自动启用的解决方案:

https://unix.stackexchange.com/a/723679/547917

apt --no-enable --no-start但这很荒谬,没有什么比这更简单的了,例如使用某种 swtch 。

答案1

您可以通过设置 systemd 预设来确保新安装的服务(至少是现在大多数使用 systemd 单元配置的服务)在默认情况下被禁用:

sudo mkdir -p /etc/systemd/system-preset
echo 'disable *' | sudo tee /etc/systemd/system-preset/99-default-disable.preset

man systemd.preset了解详情。

答案2

如果您正在创建自己的包并且不希望该服务自动启动,则可以安装预设文件。有很多位置,我为我的包选择了以下位置,因为该文件夹已经存在并带有默认的 systemd 文件:

/etc/systemd/system-preset/

我以我的包命名我的文件,50-开头.preset为扩展名:

50-<package-name>.preset

在文件中,我添加了一行:

disable <service-name>.service

通常,<service-name>与 相同<package-name>,但并非总是如此。

现在,在debian/<package-name>.install文件中,我又多了一行:

/usr/share/<package-name>/50-<package-name>.preset /etc/systemd/system-preset/

在我的一个CMakeLists.txt文件的某处,我将该.preset文件安装在/usr/share/<package-name>/目录中,因为您无法直接安装/etc/....像这样的东西:

project(service-config)

INSTALL(
    FILES
        50-<package-name>.preset

    DESTINATION
        share/<package-name>
)

现在服务状态显示:

...; vendor preset: disabled)

换句话说,从禁用的服务开始。就我而言,该服务需要安装密钥才能工作,因此我希望默认情况下禁用它。

相关内容