Listar todos os serviços que começam na inicialização

12

Eu estou procurando uma maneira de obter uma lista de todos os serviços (/etc/init.d ou upstart ou systemd), que devem estar iniciando (ou tendo sido iniciados em) boot.

Como você obtém uma lista de todas as partidas serviços? - Eu conheço essa questão e sugere usar service --status-all .

Mas isso não me mostra quais serviços são SUPOSTOS PARA SER EXECUTADOS . Ele chama todos os scripts init com o argumento " status ". Esta é uma lista de todos os serviços que podem estar em execução.

Mas gostaria de saber se um serviço iniciado na inicialização ainda está em execução.

Exemplo…

Eu tenho webfs instalados. Mas eu não quero que seja executado na inicialização. Assim, eu o desativei: sudo update-rc.d webfs disable . E eu também tenho o samba instalado e ele deve estar rodando na inicialização. Mas está parado (por qualquer motivo). sudo service --status-all não me ajuda aqui:

$ sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
 [ - ]  samba
 [ - ]  webfs

Ambos estão desligados, mas não tenho ideia de que um deles (o samba) deveria estar ligado.

Então ...

Como posso obter uma lista de todos os serviços que estão iniciando na inicialização? E, como extensão, há uma maneira fácil de obter o "status" desses serviços (se não, eu simplesmente passará por cima desta lista e executará "service $ service status", ou algo assim).

Obrigado Alexandre

Editar 2015-05-04: Estou no Ubuntu 14.04.

O foco principal desta questão é o seguinte:

Mas gostaria de saber se um serviço iniciado na inicialização ainda está em execução.

Por causa disso, initctl list não ajuda muito. Ele realmente não leva em consideração os serviços iniciados por /etc/init.d scripts (em comparação com scripts iniciados em /etc/init ).

Além disso, uma listagem de /etc/rc?.d/S* não ajuda. Ele geraria uma lista de serviços, que podem ter sido iniciados em um determinado nível de execução. Não me mostra se um serviço que deveria ter sido iniciado ainda está em execução.

Basicamente, estou procurando por algo como svcs -x do Solaris for Ubuntu. Com svcs -x , eu teria saída se um serviço iniciado não estivesse mais em execução. Isso, eu preciso para o Ubuntu também.

Razão: Eu gostaria de ter um (mais ou menos ...) cheque genérico para o nosso sistema de monitoramento Icinga / Nagios, que me alertaria, se um serviço não está mais rodando, o qual deveria estar rodando. Como temos muitos servidores diferentes para muitos clientes diferentes, não é muito escalável definir uma lista de serviços "importantes".

    
por Alexander Skwar 24.04.2015 / 09:12

3 respostas

14

Todos os serviços são iniciados na inicialização:

initctl list

Lista de todos os serviços que existem no sistema:

service --status-all
    
por kaxi1993 07.12.2016 / 00:18
2

Aqui está meu oneliner grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-

Uma saída de bit cleaner pode ser obtida com grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'

Agora vamos entrar em detalhes. As tarefas de inicialização são armazenadas em /etc/init/ , certo? Todos os trabalhos têm uma linha indicando em qual nível de execução eles começam. O nível de execução 2 é uma inicialização normal, nível de execução padrão. Então, se nós grep todas as linhas que dizem runlevel e limpar a saída do grep com awk para coincidir com apenas as linhas com start on e runlevel # 2, obtemos a lista de trabalhos iniciantes. O restante é apenas para formatar necessidades, substituir / em nomes de arquivos para espaço e cortar o caminho para esses arquivos, deixando os próprios nomes de arquivos.

A parte !/#/ é endereçar as diretivas iniciais possivelmente comentadas, que eu adicionei pessoalmente manualmente.

Entre outras coisas, há /etc/rc2.d onde (se eu entendi corretamente) você tem scripts de menor prioridade.

Um-liner bruto para isso é: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

Scripts que nessa pasta que realmente são executados no nível de execução 2 são nomeados começando com S e seguidos pelo número de prioridade. Agora, basicamente, obtemos todos os arquivos que começam com S e listamos apenas com o nome da prioridade (ainda temos que descobrir como limpar isso).

Como o muru apontou corretamente nos comentários, há também /etc/init/*.override arquivos, que podem ". .modificar como um trabalho será executado sem ter que modificar seu arquivo de configuração diretamente" (init manpage )

No momento atual, já que não tenho muita experiência com esses arquivos, só posso sugerir olhar através desses arquivos .override usando 'grep' manual '/etc/init/*.override' para listar os serviços que são informados para ser iniciado manualmente com os comandos initctl ou services .

    
por Sergiy Kolodyazhnyy 24.04.2015 / 09:53
0

Relacione todos os serviços e status de runlevel - estilo chkconfig:

# sysv-rc-conf --list

acpid        2:on       3:on    4:on    5:on
apache-htcac 0:off      1:off   2:off   3:off   4:off   5:off   6:off
apache2      0:off      1:off   2:on    3:on    4:on    5:on    6:off

Edição baseada em texto interativo de todos os listados:

# sysv-rc-conf

l SysV Runlevel Config   -: stop service  =/+: start service  h: help  q: quit qk
x 
x service      1       2       3       4       5       0       6       S 
x ----------------------------------------------------------------------------
x acpid       [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x apache-ht$  [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]
x apache2     [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x
x Use the arrow keys or mouse to move around.      ^n: next pg     ^p: prev pg
x                        space: toggle service on / off

Pode ser necessário instalá-lo, se não estiver lá:

apt install sysv-rc-conf
    
por bzean 28.04.2017 / 20:12