如何判断 systemd 服务启动的原因?

naf*_*fmo 8 systemd centos7

我试图找出为什么在系统上启动特定服务,我想知道是否有一个命令可以告诉为什么启动特定服务?

\n\n

当询问服务状态时,systemctl 声称它已被禁用,但它正在运行,而且我没有明确要求启动它,AFAICT。下面的输出(稍微匿名)

\n\n
# systemctl status myservice\n\xe2\x97\x8f myservice.service - My Service\n   Loaded: loaded (/usr/lib/systemd/system/myservice.service; disabled; vendor preset: disabled)\n   Active: active (running) since m\xc3\xa5n 2017-02-27 13:57:15 CET; 30min ago\n     Docs: http://www.example.com/\n Main PID: 4680 (ewe)\n   CGroup: /system.slice/myservice.service\n           \xe2\x94\x9c\xe2\x94\x804680 /opt/myservice/vbc/bin/myservice\n           \xe2\x94\x94\xe2\x94\x804944 /opt/myservice/vbc/bin/myservice\n
Run Code Online (Sandbox Code Playgroud)\n\n

正在启动一项已Before=myservice.service在其.service文件中设置的服务( no Requires),所以我对此表示怀疑,但我不能确定。

\n\n

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

\n\n

编辑:我已经能够通过确保与上述服务具有Requires=,After=Wants=关系并且由瞬态运行一次服务启动的服务显式停止来解决该问题。执行此操作时,服务未启动。然而,我还没有更接近于弄清楚它最初为何开始。

\n\n

编辑:似乎只要重新启动与它有关系的服务之一,我的服务文件就会启动Requires。我没想到会发生这种情况,我认为这仅意味着我的服务在启动时会启动其他服务,而不是它也会启动我的服务。删除修复了Requires幻象重新启动。

\n

iwa*_*rue 5

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

\n\n

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

\n\n

我对 TFTP 有这样的设置,例如:

\n\n

sudo systemctl list-dependencies | grep socket

\n\n
\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80sockets.target\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80dbus.socket\n<snip>\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80tftp.socket\n
Run Code Online (Sandbox Code Playgroud)\n\n

它的配置表示如果收到 UDP/69 流量则启动服务:

\n\n
# /usr/lib/systemd/system/tftp.socket\n[Unit]\nDescription=Tftp Server Activation Socket\n\n[Socket]\nListenDatagram=69\n\n[Install]\nWantedBy=sockets.target\n
Run Code Online (Sandbox Code Playgroud)\n

  • 如果列表依赖项根本不显示该服务怎么办? (5认同)