quem controla um serviço linux?

1

Como eu rapidamente descubro quem controla algum serviço Linux?

Estou cansado de bisbilhotar / etc para descobrir se initd, upstart, systemd ou supervisord está controlando algum serviço.

    
por jeremyjjbrown 30.01.2015 / 23:06

1 resposta

3

Se você não tiver certeza de qual init, poderá adivinhar em ps | grep -E "systemd|upstart" . (Alguns systemd brilhantes podem estar presentes em sistemas iniciantes herdados, mas não vice-versa, eu acho). Você pode checar por supervisord ou assim também.

O googling initd me fala sobre /etc/init.d , então eu suponho que foi isso que você quis dizer ... Desculpe, mas nada vem à mente para detectar scripts init do sysV outros do que procurar em / etc. (Se você está preso no sysvinit eu acho que você adicionalmente quer /etc/init.d/foo status ou service foo status , para ter certeza de que seu serviço está sendo executado do sysvinit. Isso não vai te dizer se o serviço infelizmente foi executado a partir de ambos sysvinit e supervisord).

No upstart, acho que é fácil encontrar trabalhos porque initctl list mostra pids. Então, se estiver lá, é um trabalho iniciante ou um script init sysV executado com compatibilidade reversa (e veja acima para detectar a diferença).

No systemd, você pode verificar um determinado pid usando o campo cgroups do ps , ver abaixo. Se o cgroup disser .service , ele deve ter sido iniciado pelo systemd. Se você não se importar em procurar um (potencialmente ambíguo) processo nome , systemd-cgls será mais fácil de lembrar. Então eu acho que systemctl status foo vai te dar informação suficiente para detectar o script init do sysV para foo.service.

$ ps xawf -eo pid,user,cgroup,args
  PID USER     CGROUP                              COMMAND
    2 root     -                                   [kthreadd]
    3 root     -                                    \_ [ksoftirqd/0]
[...]
 4281 root     -                                    \_ [flush-8:0]
    1 root     name=systemd:/systemd-1             /sbin/init
  455 root     name=systemd:/systemd-1/sysinit.service /sbin/udevd -d
28188 root     name=systemd:/systemd-1/sysinit.service  \_ /sbin/udevd -d
28191 root     name=systemd:/systemd-1/sysinit.service  \_ /sbin/udevd -d
 1096 dbus     name=systemd:/systemd-1/dbus.service /bin/dbus-daemon --system --address=systemd: --nofork --systemd-activation
[...]

Para uso do supervisord supervisord status .

    
por 31.01.2015 / 00:39

Tags