No Ubuntu, existe um comando para mostrar uma lista de TODOS os serviços de inicialização automática?


22

No Ubuntu,

  1. Existe um comando para mostrar uma lista de todos os serviços de inicialização automática?
  2. Existe um comando para verificar se um serviço é iniciado automaticamente no momento da inicialização ou não?

Eu fiz o Google e o IRC. Não consigo encontrar a resposta. Talvez não exista esse comando no Ubuntu. No começo, eu achava que todos os serviços iniciados automaticamente estariam abaixo /etc/rc2.d/, mas eu estava errado sobre isso. Alguns estão configurados apenas em /etc/init/*.conf. Então eu tentei a chkconfigferramenta (instalei-a manualmente), ela não funciona o tempo todo. Por exemplo, fornece o resultado errado para o mongodbqual é iniciado automaticamente /etc/init/mongodb.conf.

service --status-alle initctl listpode apenas informar o status atual dos serviços em vez do status de inicialização automática. update-rc.dé um comando para alterar o status de inicialização automática em vez de mostrar o status.

Se não houver resposta para minha pergunta, estou apenas me perguntando por que é tão difícil verificar os serviços de inicialização automática no Ubuntu.


Eu acho que chkconfig --listvai funcionar certo? onsignifica que o serviço está sendo executado nesse nível de execução e esse serviço será iniciado automaticamente quando o sistema inicializar.
máximo

1
Como eu publiquei na minha pergunta, o chkconfig nem sempre funciona. por exemplo, dará resultado errado para o mongodb. Eu acho que sim, porque o mongodb usa o /etc/init/mongodb.conf para iniciar automaticamente.
SSS

Que tal ls /etc/rc?.d?
toxaq

Respostas:


11

O Ubuntu usa em Upstartvez do initsistema tradicional . Upstart é mais forte que o init, mas é um pouco mais complicado que init.

O iniciante, por outro lado, é baseado em eventos. Um "evento" pode ser algo como "inicializar" ... ou pode ser muito mais específico, como "a rede está pronta para uso agora". Você pode especificar quais scripts dependem de quais eventos. Qualquer coisa que não esteja aguardando um evento pode ser executada sempre que houver CPU disponível.

Esse sistema baseado em eventos tem outra vantagem: você pode usá-lo teoricamente mesmo depois que o sistema estiver em funcionamento. Eventualmente, o upstart está programado para assumir tarefas como conectar dispositivos externos, como pen drives (atualmente tratados pelo udev e hal) ou executar programas em horários específicos (atualmente tratados pelo cron).

Como você deve saber agora, um daemon morto (que não é executado na inicialização) pode estar vivo e iniciar devido a um evento.

O Ubuntu possui os arquivos / etc / init, para Upstart, e /etc/init.d, para os arquivos SysV antigos. Alguns dos arquivos são scripts regulares do SysV Init que ainda não foram migrados. Mas alguns serviços migrados mantêm um link de /etc/init.d para / lib / init / upstart-job. Se você executar um desses, ele funciona, mas imprime um aviso primeiro:

Em vez de chamar scripts init através do /etc/init.d, use o utilitário service (8), por exemplo service mysql restart

Como o script que você está tentando chamar foi convertido em um trabalho Upstart, você também pode usar o utilitário restart (8), por exemplo, reinicie o mysql.

Em uma máquina Upstart, o init vem do upstart. Em vez de executar um script mestre rc que chama os scripts para um nível de execução específico, o init do Upstart recebe trabalhos de seu diretório de trabalhos.

Agora sabemos que não há uma maneira simples de listar daemons de inicialização automática, você deve listar todos os daemons e verificá-los um por um. O daemon pode ser iniciado por init, upstartou mesmo por um evento posterior. A maneira mais simples de obter esta lista é executando este comando no shell:

initctl show-config

A saída é assim:

...
hostname
  start on startup
udevtrigger
  start on ((startup and started udev) and not-container)
tty2
  start on (runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))
...

Alguns itens, como o primeiro, são tão simples que hostnamecomeçam na inicialização. Mas outros itens podem parecer mais complicados. (Mas felizmente legível por humanos :-))


Eu sabia a maior parte do que você postou. Mesmo que haja algo novo que eu não saiba, eles ainda não conseguem resolver o meu problema. Gostaria apenas de saber se existe um comando que possa executar o trabalho facilmente (para serviços iniciados e iniciados). Parece que o ubuntu NÃO possui um. Que pena! a propósito, "initctl" pode lidar apenas com serviços iniciados, em vez do sistema init tradicional. Se não houver uma maneira fácil, então eu tenho que usar a maneira mais difícil ... obrigado.
SSS

Eu observaria que, embora as versões modernas não incorretas do ubuntu tenham sido transferidas para o systemd. Surpreendentemente um bom pedaço de esta resposta ainda é válido
Journeyman Geek

novas versões do Ubuntu não usam upstart, mas systemd unix.stackexchange.com/a/287282/147671
João Pimentel Ferreira

5

Na verdade, todos os serviços estão presentes somente no /etc/init.d:

rc0.d contains the services which runs in runlevel 0
rc1.d contains the services which runs in runlevel 1
rc2.d contains the services which runs in runlevel 2
rc3.d contains the services which runs in runlevel 3
rc4.d contains the services which runs in runlevel 4
rc5.d contains the services which runs in runlevel 5
rc6.d contains the services which runs in runlevel 6

Só mais uma coisa, todos os serviços estão presentes rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.dtambém, mas é apenas um link simbólico /etc/init.d.

Veja aqui este é o conteúdo do rc1.ddiretório:

lrwxrwxrwx 1 root root  20 Aug 17 14:54 K15pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  22 Nov 28 18:47 K20acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  20 Aug 17 14:54 K20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  23 Nov  7 15:24 K20openbsd-inetd -> ../init.d/openbsd-inetd
lrwxrwxrwx 1 root root  15 Aug 17 14:54 K20saned -> ../init.d/saned
lrwxrwxrwx 1 root root  27 Aug 17 14:54 K20speech-dispatcher -> ../init.d/speech-dispatcher
-rw-r--r-- 1 root root 369 Apr 14  2012 README
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S30killprocs -> ../init.d/killprocs
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S70dns-clean -> ../init.d/dns-clean

Aqui você pode observar o link simbólico para init.d (K15pulseaudio -> ../init.d/pulseaudio).

Mas aqui todo serviço está vinculado ao init.d, certo? Mas todo serviço não será iniciado; o motivo é dois scripts.

O primeiro é um script S (S30killprocs) ---> start

O segundo é um script k (K15pulseaudio) ---> kill

Todos os serviços de script K eliminam os serviços e todos os serviços de script S iniciam os serviços para esse nível de execução.

Em resumo

S70dns-clean -> ../init.d/dns-cleaninicie o dns-cleanserviço no nível de execução 1.

K15pulseaudio -> ../init.d/pulseaudiomata o pulseaudioserviço no nível de execução 1.


Não é verdade para serviços iniciantes, que podem não aparecer aqui.
Wildcard

2

Você pode instalar o sysv-rc-conf, que é um programa ncurses para configurar / mostrar os níveis de rc graficamente.


0

Existe um comando para mostrar uma lista de todos os serviços de inicialização automática?

Veja aqui: update-rc-d-cheat-sheet

Existe um comando para verificar se um serviço é iniciado automaticamente no momento da inicialização ou não?

Nenhuma, eu sei (o que não significa nada;), mas você pode começar a ler aqui: askubuntu forum - service dependency

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.