如何在 systemd 上仅为 graphic.target 启用服务?

如何在 systemd 上仅为 graphic.target 启用服务?

我正在尝试启用蓝牙服务,仅适用于 graphic.target,别名运行级别 5。

我在使用 Debian Jessie,它使用 systemd。

有人告诉我在 /etc/systemd/system/graphical.target.wants 目录中创建一个符号链接,但我还是有点迷茫。

我已经尝试使用 update-rc.d,但没有作用。

在 /etc/systemd/system 中,有一个名为 bluetooth.service.wants 的文件夹,其中有一个 bluetooth.service 文件,其中包含单元信息。

/etc/systemd/system 中还有另一个 .service 文件,它实际上是原始 bluetooth.service 的别名。谢谢

答案1

这个答案Unix.SE 上提供了有关如何创建自定义目标的良好概述。

显然,您无法轻易覆盖[Install]systemd 单元的部分。它定义了哪个目标“需要”该单元。

~ # systemctl enable apcupsd
Created symlink /etc/systemd/system/multi-user.target.wants/apcupsd.service → /usr/lib/systemd/system/apcupsd.service.

~ # cat /usr/lib/systemd/system/apcupsd.service
[Unit]
Description=APC UPS Monitor

[Service]
ExecStart=/usr/bin/apcupsd -b

[Install]
WantedBy=multi-user.target

如您所见,启用单元(不仅仅是服务!)就像创建符号链接一样简单。现在,当 systemd 被要求启动时,multi-user.target它也会启动apcupsd.service

因此,您首先需要找出bluetooth.service的位置。我假设它位于/usr/lib/systemd/system/bluetooth.service。然后您只需要:

~ # ln -s /usr/lib/systemd/system/bluetooth.service /etc/systemd/system/graphical.target.wants/bluetooth.service

如果该graphical.target.wants目录不存在,则需要先创建它。

相关内容