我试图找出为什么在系统上启动特定服务,我想知道是否有一个命令可以告诉为什么启动特定服务?
\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
),所以我对此表示怀疑,但我不能确定。
这是在 CentOS 7.3 系统上运行的。
\n\n编辑:我已经能够通过确保与上述服务具有Requires=
,After=
和Wants=
关系并且由瞬态运行一次服务启动的服务显式停止来解决该问题。执行此操作时,服务未启动。然而,我还没有更接近于弄清楚它最初为何开始。
编辑:似乎只要重新启动与它有关系的服务之一,我的服务文件就会启动Requires
。我没想到会发生这种情况,我认为这仅意味着我的服务在启动时会启动其他服务,而不是它也会启动我的服务。删除修复了Requires
幻象重新启动。
跑步sudo systemctl status
可能会有帮助,也可能有帮助systemctl list-dependencies
。
我听说过在(我认为)Ubuntu 上安装时启动服务,但从未在 CentOS 上启动。\n但是,如果您的服务定义了套接字单元,则到给定套接字/端口的流量可能会导致您的服务自动启动。
\n\n我对 TFTP 有这样的设置,例如:
\n\nsudo systemctl list-dependencies | grep socket
\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