我喜欢将 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)
换句话说,从禁用的服务开始。就我而言,该服务需要安装密钥才能工作,因此我希望默认情况下禁用它。