Estou procurando uma maneira de obter uma lista de todos os serviços (/etc/init.d ou upstart ou systemd), que deveriam estar iniciando (ou tendo sido iniciados na) inicialização.
Como você obtém uma lista de todos os serviços iniciais? - Eu conheço essa pergunta, e ela sugere usarservice --status-all
.
Mas isso não me mostra quais serviços deveriam funcionar . Ele chama todos os scripts init com " status
" argumento. Esta é uma lista de todos os serviços que podem estar em execução.
Mas eu gostaria de saber se um serviço que foi iniciado na inicialização ainda está em execução.
Exemplo…
Eu tenho webfs instalados. Mas eu não quero que ele esteja sendo executado na inicialização. Assim eu desativou: sudo update-rc.d webfs disable
. E eu também tenho o samba instalado e ele deve estar sendo executado 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 idéia, de que um (samba) deve estar ligado.
Então…
Como eu pude obter uma lista de todos os serviços que estão iniciando na inicialização?E, como uma extensão, existe uma maneira fácil de obter o "status" desses serviços (se não, eu simplesmente percorrerei esta lista e executarei "service $ service status", ou algo assim).
Obrigado Alexander
Editar 04-05-2015: Estou no Ubuntu 14.04.
O foco principal desta pergunta é o seguinte:
Mas eu gostaria de saber se um serviço que foi iniciado na inicialização ainda está em execução.
Por isso, initctl list
não ajuda muito. Realmente não leva em consideração os serviços iniciados pelos /etc/init.d
scripts (em comparação com os scripts iniciais /etc/init
).
Também uma lista de /etc/rc?.d/S*
não ajuda. Isso geraria uma lista de serviços, que poderiam 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 algo como o svcs -x
Solaris para Ubuntu. Com svcs -x
, eu teria saída se um serviço iniciado, não estivesse mais em execução. Isso, eu precisaria do Ubuntu também.
Motivo: eu gostaria de fazer uma verificação (mais ou menos ...) genérica para o nosso sistema de monitoramento Icinga / Nagios, que me alertaria se um serviço não estivesse mais sendo executado, que deveria estar em execução. Como temos muitos servidores diferentes para muitos clientes, não é realmente possível definir uma lista de serviços "importantes".
fonte
initctl list
que lista os processos que são iniciados / corrida, mas essa lista também inclui processos que são iniciados manualmenteinitctl list
. Mas isso realmente não responde, pois também mostraria serviços iniciados manualmente. E não mostra serviços que não estão em execução.Respostas:
Todos os serviços iniciam na inicialização:
Lista de todos os serviços existentes no sistema:
fonte
Aqui está o meu oneliner
grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-
Uma saída um pouco mais limpa pode ser alcançada com
grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'
Agora vamos entrar em detalhes. Os trabalhos iniciados são todos armazenados
/etc/init/
, certo? Todos os trabalhos têm linhas indicando o nível de execução em que são iniciados. O nível de execução 2 é uma inicialização normal, o nível de execução padrão. Portanto, se grep todas as linhas que dizemrunlevel
e limparmos a saída do grep com awk para corresponder apenas às linhasstart on
e ao nível de execução # 2, obteremos a lista de trabalhos iniciados. O restante é apenas para necessidades de formatação, substitua / nos nomes dos arquivos pelo espaço e corte o caminho desses arquivos, deixando os nomes dos mesmos.A
!/#/
parte é abordar as diretivas de início possivelmente comentadas, que eu pessoalmente adicionei manualmente.Entre outras coisas, é
/etc/rc2.d
onde (se bem entendi) você tem scripts de menor prioridade.Uma linha bruta para isso é:
ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}
Os scripts 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 começando com S e apenas os listamos com apenas o nome de prioridade (ainda temos que descobrir como limpar isso).
Como muru apontou corretamente nos comentários, também existem
/etc/init/*.override
arquivos que podem "... Modificar como um trabalho será executado sem precisar modificar diretamente seu arquivo de configuração" (página de manual do init )No momento atual, como não tenho muita experiência com esses arquivos, só posso sugerir que você examine esses arquivos .override usando o manual 'grep' '/etc/init/*.override' para listar os serviços que devem ser iniciados manualmente com
initctl
ouservices
comandos.fonte
.override
arquivos.Liste todos os serviços e o respectivo status do nível de execução - estilo chkconfig:
Edição interativa baseada em texto de todos os listados:
Pode ser necessário instalá-lo, se não houver:
fonte