我如何知道 systemd 服务启动的原因?

我如何知道 systemd 服务启动的原因?

我试图弄清楚为什么系统上启动了特定的服务,我想知道是否有命令可以告诉为什么启动了特定的服务?

当询问服务状态时,systemctl 声称它已被禁用,但它正在运行,而且我还没有明确要求启动它,就我所知。输出如下(略有匿名)

# systemctl status myservice
● myservice.service - My Service
   Loaded: loaded (/usr/lib/systemd/system/myservice.service; disabled; vendor preset: disabled)
   Active: active (running) since mån 2017-02-27 13:57:15 CET; 30min ago
     Docs: http://www.example.com/
 Main PID: 4680 (ewe)
   CGroup: /system.slice/myservice.service
           ├─4680 /opt/myservice/vbc/bin/myservice
           └─4944 /opt/myservice/vbc/bin/myservice

Before=myservice.service启动已在其.service文件中设置的服务(否Requires),所以我怀疑这一点,但我不能确定。

这是在 CentOS 7.3 系统上运行的。

編輯:我已经能够解决这个问题,方法是确保明确停止与上述服务具有和Requires=关系且由临时运行一次服务启动的服务。执行此操作时,服务不会启动。我还没有弄清楚After=Wants=为什么但它首先就开始了。

編輯:看来我的服务文件是开始每当重新启动与之有关系的服务之一时Requires。我没想到会发生这种情况,我认为这只意味着我的服务在启动时会启动其他服务,而不是它也会启动我的服务。删除Requires可修复幻影重新启动问题。

答案1

跑步sudo systemctl status可能会有帮助,也可能有帮助systemctl list-dependencies

我听说过在 Ubuntu 上安装时启动服务(我认为是这样),但在 CentOS 上从未听说过。然而,如果您的服务定义了一个套接字单元,那么到给定套接字/端口的流量可能会导致您的服务自动启动。

我有这样一个 TFTP 设置,例如:

sudo systemctl list-dependencies | grep socket

│ ├─sockets.target
│ │ ├─dbus.socket
<snip>
│ │ └─tftp.socket

配置表明,如果收到 UDP/69 流量则启动服务:

# /usr/lib/systemd/system/tftp.socket
[Unit]
Description=Tftp Server Activation Socket

[Socket]
ListenDatagram=69

[Install]
WantedBy=sockets.target

答案2

服务可以启动的另一个原因(不会反映在 中)systemctl list-dependencies是,它是按需启动的 D-Bus 服务。例如,查看UPower 守护进程在我的系统上,我们可以看到它正在运行,但尚未启用:

systemctl status upower
  ● upower.service - Daemon for power management
       Loaded: loaded (/usr/lib/systemd/system/upower.service; disabled; preset: disabled)
       Active: active (running) since Fri 2023-04-07 10:56:33 EDT; 12h ago

此外,我们可以看到 systemd 服务使用以下方式公开了 D-Bus 接口:总线名称选项:

$ systemctl cat upower
# /usr/lib/systemd/system/upower.service
[Unit]
Description=Daemon for power management
Documentation=man:upowerd(8)
  
[Service]
Type=dbus
BusName=org.freedesktop.UPower
ExecStart=/usr/lib/upowerd
Restart=on-failure

最后,也是最重要的,我们可以在系统日志中看到dbus 守护进程这便启动了我们的服务。

Apr 07 10:56:33 comet-observatory-laptop dbus-daemon[319]:
[system] Activating via systemd: service name='org.freedesktop.UPower' unit='upower.service' requested by ':1.22' (uid=1000 pid=490 comm="workrave")

相关内容