我试图弄清楚为什么系统上启动了特定的服务,我想知道是否有命令可以告诉为什么启动了特定的服务?
当询问服务状态时,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")