O systemd ainda sabe sobre runlevels?

11

O systemd ainda tem o conceito de runlevels? Por exemplo, é inútil usar telinit <number> ?

    
por drpaneas 02.10.2014 / 15:52

3 respostas

12

Nível baixo de nível de execução do SystemD

Dentro do SystemD (aemon), os runlevels são expostos como "Alvos". O conceito ainda está lá, mas o fluxo de trabalho para produzir o resultado desejado para sua necessidade é diferente.

O anexo deve esclarecer esta questão.

Como altero o nível de execução atual?

$>systemctl isolate runlevelX.target

Como altero o nível de execução padrão para a próxima inicialização?

# Create a symlink
$>ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • [- s] cria link simbólico
  • [- f] remove o arquivo de destino existente

ln -sf $ TARGET $ DESTINATION

Como identifico o nível de execução atual?

$> systemctl list-units --type=target
    
por 02.10.2014 / 15:56
7

Não. Como as próprias pessoas do sistema escreveram duas vezes, uma vez no manual telinit e uma vez no manual runlevel , os runlevels são "obsoletos". Você pode esquecer os runlevels.

Essas coisas realmente não existem no systemd, com alguns shims de compatibilidade.

  • Existem alguns links simbólicos para nomes de alvos, mas esses alvos nunca são realmente usados pelo systemd corretamente.
    • Em vez disso, o processo de bootstrap emprega um default.target (e daí um ou ambos, graphical.target e multi-user.target ), rescue.target ou emergency.target . E o processo de desligamento envolve shutdown.target , reboot.target , halt.target ou poweroff.target . Nenhuma meta de nível de execução está envolvida no bootstrap ou no encerramento.
    • O comando telinit , que se pode pensar usar os links simbólicos de compatibilidade para mapear seus argumentos de linha de comando, também não o faz. Há uma tabela com fio no código-fonte do programa telinit e os números 2 , 3 , 4 e 5 como argumentos para o comando são programados para mapear para multi-user.target e graphical.target .
    • systemd-update-utmp também tem uma tabela interna com fio.
  • Não há "tabela de inicialização" de material de nível de execução. systemd só é compatível com van Smoorenburg rc , não com van Smoorenburg init .
  • Não há valor "nível de execução atual" mantido pelo próprio systemd. Em vez disso, o comando systemd-update-utmp , quase totalmente não documentado, opera internamente em termos dos estados de ativação de rescue.target , multi-user.target e graphical.target .
  • systemd-sysv-generator , o gerador de unidade de serviço de compatibilidade com versões anteriores do systemd, mescla os diretórios /etc/rc[234].d em apenas a relação Wanted-By para multi-user.target em unidades de serviço geradas. Não há referência real para executar níveis nas unidades de serviço geradas. (Costumava haver, anos atrás, mas as pessoas do sistema descobriram que isso deu errado, porque eles não estavam sendo referenciados em nenhum outro lugar.)

Se alguém é usuário de um sistema que cria o systemd, como fez o Arch Linux para o questionador em " Por que o 'init 0' resulta em "Argumentos Excessos" na instalação do Arch? ", nem sequer se obtém os shims de compatibilidade, e comandos como init 0 resultam no comportamento systemd" nativo ", que é reclamar que o comando foi incorretamente invocado.

Leitura adicional

por 25.09.2017 / 06:47
3

Muito obrigado. Então, se eu entendi corretamente:

Por exemplo:

ls -ll /usr/lib/systemd/system/runlevel*.target

Saída:

/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target

Então, como você pode ver, o conceito de runlevels existe, mas é bastante obsoleto devido ao fato de que os arquivos runlevel.target não são realmente arquivos “reais”, mas soft-links para o novo, moderno e melhor nomeado. esquema de arquivos que systemd gosta de chamá-los de "alvos".

Então, se você gostaria de fazer algo como telinit 5 , seria assim: systemctl isolate runlevel5.target que é idêntico a: systemctl isolate graphical.target (recomendado na minha opinião).

Se você estiver interessado em conhecer todos os possíveis destinos:

ls /usr/lib/systemd/system/*.target
    
por 02.10.2014 / 17:42