我怎么知道为什么systemd服务启动?

我想弄明白为什么一个特定的服务在一个系统上启动,我想知道是否有一个命令来说明为什么一个特定的服务开始?

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

# 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 

我开始在其.service文件中设置Before=myservice.service服务(不需要),所以我怀疑,但我不能确定。

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

编辑:我已经能够解决这个问题,确保一个服务,上面的服务有一个Requires=After=Wants=关系,并且是由暂时运行一次服务启动的,明确地停止。 这样做时,服务不会启动。 然而,我并不是在近距离地搞清楚为什么它是从头开始的。

编辑:似乎我的服务文件启动时,它有一个Requires关系,以重新启动一个服务。 我没有想到会发生这种情况,我认为这只会意味着我的服务在开始时会启动其他服务,而不是启动我的服务。 删除Requires修复幻影重新启动。

运行sudo systemctl status可能会有所帮助, systemctl list-dependencies也可能会有所帮助。

我听说过安装Ubuntu(Ubuntu),但从来没有在CentOS上启动服务。 但是, 如果您的服务定义了套接字单元,那么到给定套接字/端口的stream量可能导致您的服务自动启动。

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

sudo systemctl list-dependencies | grep socket

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

configuration它说如果UDP / 69stream量收到,启动服务:

 # /usr/lib/systemd/system/tftp.socket [Unit] Description=Tftp Server Activation Socket [Socket] ListenDatagram=69 [Install] WantedBy=sockets.target