Eu não sei sobre as respostas abaixo, mas no RHEL / Centos 7.6 init 1ou init 3ou init 5ou init 6ou init 0ou runlevelainda se comportam como sempre, e é isso que me interessa. Muito sintaxe mais fácil entãosystemctl blabla blabla.blabla
No SystemD (aemon), os níveis de execução são expostos como "Destinos". O conceito ainda está lá, mas o fluxo de trabalho para produzir o resultado desejado para seus requisitos é 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
ln -sf TARGETDESTINATION
-s cria um link simbólico
-f remove o arquivo de destino existente
OU (como @centimane sugeriu) simplesmente use o systemdcomando "abençoado" :
Ainda posso usar o comando init para alternar entre níveis de execução?
drpaneas
2
Se o seu pacote systemd for construído com suporte a SysV, ele incluirá um link simbólico telinit para o binário systemd, que, quando chamado como telinit, mapeará os níveis de execução de 0 a 6 para os destinos systemd - consulte telinit (8) para obter uma lista desses mapeamentos .
Wieland
2
Para alterar o destino padrão, você deve usar, em systemctl set-default [target name].targetvez de criar manualmente o link.
Centimane 8/01/19
13
Não. Como as pessoas do sistema escreveram duas vezes, uma vez no telinitmanual e outra no runlevelmanual, os níveis de execução são "obsoletos". Você pode esquecer os níveis de execução.
Essas coisas realmente não existem no systemd, com alguns shims de compatibilidade.
Existem alguns links simbólicos para nomes de destinos, mas esses destinos nunca são realmente usados pelo sistema adequado.
Em vez disso, o processo de autoinicialização emprega um default.target(e daí um ou ambos de a graphical.targete a multi-user.target), a rescue.targetou um emergency.target. E o processo de desligamento envolve a shutdown.target, a reboot.target, a halt.targetou a poweroff.target. Nenhum destino em nível de execução está envolvido na inicialização ou no desligamento.
O telinitcomando, que se pode pensar que usa os links simbólicos de compatibilidade para mapear seus argumentos de linha de comando, também não o faz. Há uma mesa com fio no código fonte do telinitprograma, e os números 2, 3, 4, e 5como argumentos para o comando são conectados para mapear multi-user.targete graphical.target.
systemd-update-utmp também possui uma tabela interna com fio.
Não existe uma "tabela de inicialização" de itens de nível de execução. O systemd é compatível apenas com van Smoorenburg rc, não com van Smoorenburg init.
Não há valor de "nível de execução atual" mantido pelo próprio systemd. Pelo contrário, o quase totalmente indocumentados systemd-update-utmpcomando opera internamente em termos de activação estados de rescue.target, multi-user.targete graphical.target.
systemd-sysv-generator, o gerador da unidade de serviço de compatibilidade com versões anteriores do systemd, mescla os /etc/rc[234].ddiretórios em apenas um Wanted-Byrelacionamento multi-user.targetnas unidades de serviço geradas. Não há referência real para executar níveis nas unidades de serviço geradas. (Havia alguns anos atrás, mas as pessoas do sistema descobriram que isso deu errado, porque não estavam sendo referenciadas em nenhum outro lugar.)
Se alguém é usuário de um sistema que constrói systemd como o Arch Linux para o interlocutor em " Por que o init 0` resulta em" Excesso de Argumentos "na instalação do Arch? ", Nem sequer obtém os shims de compatibilidade e comanda tais como init 0resultado no comportamento "nativo" do systemd, que consiste em reclamar que o comando foi invocado incorretamente.
Leitura adicional
Lennart Poettering et al runlevel. páginas de manual do systemd. Freedesktop.org.
Lennart Poettering et al telinit. páginas de manual do systemd. Freedesktop.org.
Lennart Poettering et al bootup. páginas de manual do systemd. Freedesktop.org.
Então, como você pode ver, o conceito de níveis de execução existe, mas é bastante obsoleto devido ao fato de os arquivos runlevel.target não serem realmente arquivos "reais", mas vincular softwares ao novo, moderno e melhor nomeado esquema de arquivos que O systemd gosta de chamá-los de "alvos".
Então, se você gostaria de fazer algo assim telinit 5, seria assim: o systemctl isolate runlevel5.target
que é idêntico a: systemctl isolate graphical.target(recomendado na minha opinião).
Apenas no caso de você estar interessado em conhecer todos os alvos possíveis:
Sim, acredito que você está entendendo isso corretamente. Serei um adotante tardio do SystemD, pois o sistema INIT.D de procedimento, passo a passo, é o que eu estou mais familiarizado ... Aplaudo que você esteja explorando o SystemD. A melhor parte do SystemD é seu multi-threading paralelo, que permite uma inicialização mais rápida. A inicialização com vários threads pode ser realizada com o INIT.D, mas requer scripts BASH fortes.
Tyler Maginnis
BTW, ls -llé equivalente a ls -l. Você pode querer adquirir o hábito de usar ls -ld.
G-Man diz 'Reinstate Monica'
telinit 0/ telinit 6ainda trabalho. Como isso ajuda na migração, acho que a maioria das distros ainda não vê um motivo para descartar o suporte. isolateclaramente aspirava imitar o funcionamento dos níveis de execução, mas existem vários casos extremos. Eu recomendo ignorar todas as instruções para isolate runlevel5.targetou mesmo isolate graphical.target. Caso borda Exemplo: github.com/systemd/systemd/issues/6505
sourcejedi
0
O systemd introduziu os destinos como uma contrapartida dos níveis de execução no sistema sysV init. Os desenvolvedores do sytemd tornaram quase compatível com a maioria dos scripts sysV. O mesmo acontece para
telinit <runlevel>. Isso é traduzido em equivalente ao systemd.
Por exemplo, telinit 0desliga a máquina. O systemd possui poweroff.target para fazer o mesmo que o nível de execução 0 . Então, telinit 0é traduzido pelo systemd para ativar o poweroff.target .
init 1
ouinit 3
ouinit 5
ouinit 6
ouinit 0
ourunlevel
ainda se comportam como sempre, e é isso que me interessa. Muito sintaxe mais fácil entãosystemctl blabla blabla.blabla
Respostas:
Nível baixo de execução do SystemD
No SystemD (aemon), os níveis de execução são expostos como "Destinos". O conceito ainda está lá, mas o fluxo de trabalho para produzir o resultado desejado para seus requisitos é diferente.
O anexo deve esclarecer esta questão.
Como altero o nível de execução atual?
Como altero o nível de execução padrão para a próxima inicialização?
ln -sf TARGET DESTINATION
-s
cria um link simbólico-f
remove o arquivo de destino existenteOU (como @centimane sugeriu) simplesmente use o
systemd
comando "abençoado" :Como identifico o nível de execução atual?
fonte
systemctl set-default [target name].target
vez de criar manualmente o link.Não. Como as pessoas do sistema escreveram duas vezes, uma vez no
telinit
manual e outra norunlevel
manual, os níveis de execução são "obsoletos". Você pode esquecer os níveis de execução.Essas coisas realmente não existem no systemd, com alguns shims de compatibilidade.
default.target
(e daí um ou ambos de agraphical.target
e amulti-user.target
), arescue.target
ou umemergency.target
. E o processo de desligamento envolve ashutdown.target
, areboot.target
, ahalt.target
ou apoweroff.target
. Nenhum destino em nível de execução está envolvido na inicialização ou no desligamento.telinit
comando, que se pode pensar que usa os links simbólicos de compatibilidade para mapear seus argumentos de linha de comando, também não o faz. Há uma mesa com fio no código fonte dotelinit
programa, e os números2
,3
,4
, e5
como argumentos para o comando são conectados para mapearmulti-user.target
egraphical.target
.systemd-update-utmp
também possui uma tabela interna com fio.rc
, não com van Smoorenburginit
.systemd-update-utmp
comando opera internamente em termos de activação estados derescue.target
,multi-user.target
egraphical.target
.systemd-sysv-generator
, o gerador da unidade de serviço de compatibilidade com versões anteriores do systemd, mescla os/etc/rc[234].d
diretórios em apenas umWanted-By
relacionamentomulti-user.target
nas unidades de serviço geradas. Não há referência real para executar níveis nas unidades de serviço geradas. (Havia alguns anos atrás, mas as pessoas do sistema descobriram que isso deu errado, porque não estavam sendo referenciadas em nenhum outro lugar.)Se alguém é usuário de um sistema que constrói systemd como o Arch Linux para o interlocutor em " Por que o init 0` resulta em" Excesso de Argumentos "na instalação do Arch? ", Nem sequer obtém os shims de compatibilidade e comanda tais como
init 0
resultado no comportamento "nativo" do systemd, que consiste em reclamar que o comando foi invocado incorretamente.Leitura adicional
runlevel
. páginas de manual do systemd. Freedesktop.org.telinit
. páginas de manual do systemd. Freedesktop.org.bootup
. páginas de manual do systemd. Freedesktop.org./etc/inittab
é uma coisa do passado. . Respostas dadas com freqüência.fonte
Muito obrigado. Então, se eu entendi corretamente:
Por exemplo:
Resultado:
Então, como você pode ver, o conceito de níveis de execução existe, mas é bastante obsoleto devido ao fato de os arquivos runlevel.target não serem realmente arquivos "reais", mas vincular softwares ao novo, moderno e melhor nomeado esquema de arquivos que O systemd gosta de chamá-los de "alvos".
Então, se você gostaria de fazer algo assim
telinit 5
, seria assim: osystemctl isolate runlevel5.target
que é idêntico a:systemctl isolate graphical.target
(recomendado na minha opinião).Apenas no caso de você estar interessado em conhecer todos os alvos possíveis:
fonte
ls -ll
é equivalente als -l
. Você pode querer adquirir o hábito de usarls -ld
.telinit 0
/telinit 6
ainda trabalho. Como isso ajuda na migração, acho que a maioria das distros ainda não vê um motivo para descartar o suporte.isolate
claramente aspirava imitar o funcionamento dos níveis de execução, mas existem vários casos extremos. Eu recomendo ignorar todas as instruções paraisolate runlevel5.target
ou mesmoisolate graphical.target
. Caso borda Exemplo: github.com/systemd/systemd/issues/6505O systemd introduziu os destinos como uma contrapartida dos níveis de execução no sistema sysV init. Os desenvolvedores do sytemd tornaram quase compatível com a maioria dos scripts sysV. O mesmo acontece para
telinit <runlevel>
. Isso é traduzido em equivalente ao systemd.Por exemplo,
telinit 0
desliga a máquina. O systemd possui poweroff.target para fazer o mesmo que o nível de execução 0 . Então,telinit 0
é traduzido pelo systemd para ativar o poweroff.target .Mas existem alguns problemas de compatibilidade nos sistemas sytemd e sysV init-> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilidades .
fonte