Systemd 启用的服务无法在启动时启动,但可以手动启动

Systemd 启用的服务无法在启动时启动,但可以手动启动

我在 /etc/systemd/system/ 创建了下面的 test.service

[Unit]
Description=Operations
After=multi-user.target

[Service]
ExecStart=/opt/sga/tools/test_service_start.sh

ExecStop=/opt/sga/tools/test_stop.sh


[Install]
WantedBy=default.target

如果我执行 systemctl -l status test.service,下面是命令输出:

● test.service - test_Operations
   Loaded: loaded (/etc/systemd/system/test.service; enabled; vendor preset: disabled)
   Active: inactive (dead)

如果我在重新启动后执行“journalctl -u test.service -b”:

 - No entries

谁可以帮我这个事

答案1

在使用系统总线时,我们通常使用:

[Install]
WantedBy=multi-user.target

根据您的系统,default.target可能会别名(符号链接)为multi-user.targetgraphical.target。在我的系统上,我可以看到 default.target 符号链接到graphical.target

$ systemctl status default.target
● graphical.target - Graphical Interface
     Loaded: loaded (/lib/systemd/system/graphical.target; static)
     Active: active since Wed 2021-03-17 07:44:06 CET; 6h ago
       Docs: man:systemd.special(7)

graphical.target有点奇怪,因为如果您需要图形环境来运行您的东西,您通常应该使用用户总线而不是系统总线。否则,如果您不同时设置XAUTHORITY和设置,则会出现问题DISPLAY

我为你看到了两个选择:

  1. WantedBy=multi-user.target如果您的应用程序不需要图形环境,请使用。在编辑文件之前,运行sudo systemctl disable test.service删除符号链接,然后编辑文件并运行sudo systemctl daemon-reload && sudo systemctl enable test.service.

  2. 保留WantedBy=default.target,但如果您需要图形环境,请将您的服务移至用户总线。用户总线上的另一个选项是graphical-session.target。然而,它还没有被 DE 实现,所以虽然这听起来像是一个更好的匹配,但在选择它之前检查它是否在您的系统上引发。

相关内容