Como posso saber por que um serviço systemd foi iniciado?

3

Estou tentando descobrir por que um serviço específico é iniciado em um sistema e gostaria de saber se existe um comando para dizer por que um serviço específico foi iniciado?

Ao solicitar status no serviço, o systemctl afirma que está desativado, mas está em execução e eu não pedi explicitamente para iniciá-lo, AFAICT. Saída abaixo (ligeiramente anonimizada)

# 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

Eu estou iniciando um serviço que definiu Before=myservice.service em seu arquivo .service (no Requires ), então estou suspeitando disso, mas não tenho certeza.

Isso está sendo executado em um sistema CentOS 7.3.

EDITADO: Consegui contornar o problema certificando-me de que um serviço com o serviço acima tenha uma relação Requires= , After= e Wants= e que seja iniciado por um serviço transitório de uma vez, é explicitamente interrompido. Ao fazer isso, o serviço não é iniciado. Eu não estou mais perto de descobrir porque foi iniciado em primeiro lugar, no entanto.

EDITED: Parece que meu arquivo de serviço é iniciado sempre que um dos serviços com relação a Requires são reiniciados. Eu não esperava que para acontecer, eu assumi que isso só significaria que o meu serviço seria iniciar o outro serviço quando iniciado, não que ele também comece o meu. Remover Requires corrige as reinicializações fantasmas.

    
por nafmo 27.02.2017 / 14:44

1 resposta

3

A execução de sudo systemctl status pode ajudar, assim como systemctl list-dependencies .

Eu tinha ouvido falar de serviços sendo iniciados na instalação do (eu acho) Ubuntu, mas nunca no CentOS. No entanto, SE seu serviço tem uma unidade de soquete definida, o tráfego para um determinado soquete / porta pode estar fazendo com que seu serviço seja iniciado automaticamente.

Eu tenho essa configuração para o TFTP, por exemplo:

sudo systemctl list-dependencies | grep socket

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

Config for it diz para iniciar o serviço se o tráfego UDP / 69 for recebido:

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

[Socket]
ListenDatagram=69

[Install]
WantedBy=sockets.target
    
por 03.03.2017 / 11:57