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
.