AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 506341
Accepted
Luciano Andress Martini
Luciano Andress Martini
Asked: 2019-03-15 10:25:08 +0800 CST2019-03-15 10:25:08 +0800 CST 2019-03-15 10:25:08 +0800 CST

A parada do Debian 9 realmente não desliga em novas versões - por quê?

  • 772

IMPORTANTE: Eu posso restaurar o comportamento antigo se eu fizer:

apt install sysvinit-core  

Além disso: as versões antigas baseadas em Red Hat também podem ser desligadas com interrupção.

Estou tentando entender por que no Debian 9 você não deve mais usar halt para desligar seu computador. Esse comportamento é removido do systemd. Eu sou um pouco assustador, mas acho que deve haver uma boa razão lógica.

Outros Unixes ou Unix-like têm esse mesmo comportamento ou o Linux está se transformando em algo diferente?

Agora, se você quiser desligar a máquina após o desligamento do sistema, você deve usar poweroff em vez de halt...

Alguém sabe como esse comando é interpretado em outros Unix-Like?

Isso não é duplicado, porque o debian 7 pode desligar com o halt, por exemplo.

debian halt
  • 2 2 respostas
  • 2177 Views

2 respostas

  • Voted
  1. Best Answer
    telcoM
    2019-03-19T08:22:56+08:002019-03-19T08:22:56+08:00

    Debian

    Ao usar SysVinit em sistemas Debian(esque), /etc/defaults/haltinclui uma variável que define se o sistema executará halt ou poweroff no final da transição para o nível de execução 0. A configuração padrão é HALT=poweroff.

    Antes do SysVinit 2.74 você não deveria executar haltdiretamente, e a partir dessa versão, o haltcomando SysVinit apenas chamará shutdown -ha menos que o nível de execução atual seja 0 ou 6. Isso está documentado na halt(8)página man. No final da transição para o nível de execução 0, os scripts de nível de execução serão executados $HALT, que é igual a poweroffpadrão.

    RHEL/CentOS

    O RHEL/CentOS 5 foi a última versão a usar o SysVinit: a versão 6 usou upstarte a versão 7 usa systemd. No RHEL 5.11, o último script a ser executado ao fazer a transição para o nível de execução 0 é /etc/init.d/halt, e suas últimas linhas são:

    [ "$INIT_HALT" != "HALT" ] && HALTARGS="$HALTARGS -p"
    
    exec $command $HALTARGS
    

    Como o mesmo script também é executado no final da transição para o nível de execução 6 (reinicialização), o comando real a ser executado é definido pela variável $command, e será /sbin/haltou /sbin/reboot. De acordo com o valor da $INIT_HALTvariável, o script decidirá se adiciona ou não a -popção. Essa variável é definida por /sbin/shutdown. A página de manual do RHEL 5.11 shutdown(8)diz:

    PARAR OU DESLIGAR

    A opção -H apenas define a variável de ambiente init INIT_HALT como HALT, e a opção -P apenas define essa variável como POWEROFF. O script de desligamento que chama halt(8) como a última coisa na seqüência de desligamento deve verificar essas variáveis ​​de ambiente e chamar halt(8) com as opções corretas para que essas opções realmente tenham algum efeito. O Debian 3.1 (sarge) suporta isso.

    (Sim, a página de manual do RHEL 5.11 menciona o Debian 3.1! Acho que alguém no RedHat portando patches de várias fontes para o RHEL perdeu uma referência...)

    Parece que a RedHat decidiu codificar o teste mencionado acima no /etc/init.d/haltscript de tal forma que desligar a energia (usando /sbin/halt -pno final do desligamento) é a ação de parada padrão: a única maneira de conseguir parar sem desligar é usar a opção maiúscula -Hdo shutdowncomando para solicitá-lo explicitamente, por exemploshutdown -hH now

    Mas, novamente, o desligamento padrão é acionado pelos scripts de nível de execução personalizados pela distribuição Linux, portanto, não é realmente um recurso do haltcomando SysVinit.

    Nota histórica

    Sistemas antigos que usam SysVinit (tanto Linux quanto não) costumavam ter vários comandos que não deveriam ser usados ​​diretamente, mas apenas como parte dos scripts de desligamento/reinicialização apropriados. Antes do SysVinit 2.74, o /sbin/haltcomando sem opções teria feito o mesmo que halt -fo SysVinit moderno faz, ou seja, um desligamento brutal e imediato do kernel sem interromper nenhum serviço ou desmontar sistemas de arquivos.

    Pela mesma razão, estar acostumado com o killallcomando Linux pode ser perigoso em outros Unixes. Sua página de manual ainda tem este aviso sinistro:

    Esteja avisado que digitar killall name pode não ter o efeito desejado em sistemas não Linux, especialmente quando feito por um usuário privilegiado.

    Isso ocorre porque o SystemV clássico killallera um desses comandos projetados para serem usados ​​apenas como parte de um script de desligamento. Em distribuições Linux com SysVinit, a versão clássica do comando pode ser encontrada como killall5. Ele literalmente mata todos os processos, exceto threads e processos do kernel em sua própria sessão: seu uso pretendido é em um script de desligamento após desligar todos os serviços, pouco antes de desmontar os sistemas de arquivos locais, para matar quaisquer outros processos que possam atrasar ou impedir a desmontagem.

    (Como eu sei disso, você pergunta? Bem, uma vez cometi o erro de executar killall <something>como root em um sistema Solaris 2.6. Uma experiência de aprendizado muito eficaz.)

    • 6
  2. JdeBP
    2019-03-15T17:16:12+08:002019-03-15T17:16:12+08:00

    Esta questão é baseada em múltiplas falsidades.

    Não haltse costumava desligar o computador, e isso não mudou com o systemd.

    haltaka haltsysdesliga e pára. poweroffé um comando mais recente que desliga e desliga. ( https://unix.stackexchange.com/a/196471/5132 explica as sutilezas disso que vou passar por cima aqui, já que a pergunta é apenas sobre sistemas operacionais Linux. Esta resposta se concentra apenas no AT&T System 5 UNIX lado do universo.)

    Como expliquei em https://superuser.com/a/900205/38062 , os computadores não são necessariamente capazes de desligar sob controle de software. A ação do comando haltsyse halttem sido convencionalmente desligar e parar a máquina, sendo a próxima ação o operador usando um botão de reinicialização físico ou interruptor de alimentação.

    haltganhou uma opção -p/ --poweroffpara torná-lo equivalente a poweroff, mas isso é sintomático de um crescimento geral de opções sobrepostas e autocontraditórias para esses comandos. Veja a página de manual do haltcomando Upstart no Debian 7 . Há halt --powerofflá. A página de manual do haltcomando van Smoorenburg no Debian 7 também tem halt -p.

    Mas isso não é algo que mudou com o systemd. systemd fornece o mesmo. O comando systemd halt também tem --poweroff. Além disso, tem --reboote (para uma boa medida) --haltopções.

    Eu tive que fazer o mesmo com o comando halt/haltsys no nosh toolset , para compatibilidade.

    Você pode erroneamente pensar que o velho haltdesligou seu computador. Mas isso era inequivocamente errado para o Upstart, e apenas verdadeiro para o conjunto de ferramentas van Smoorenburg se você encontrasse um bug .

    O bug, que só este ano finalmente foi corrigido, era que o haltcomando van Smoorenburg simplesmente ignorava a presença ou ausência da -popção e, em vez disso, decidia se deveria parar ou desligar de acordo com o valor de uma configuração em /etc/default/halt. Se você tivesse essa configuração definida para desligar, haltsempre desligaria, mesmo que nenhuma -popção fosse fornecida. Por outro lado, se você tiver essa configuração definida como parada, haltela sempre será interrompida, mesmo se uma -popção for fornecida.

    Mas isso era um bug , não o comportamento documentado nem pretendido, não o comportamento de todos os haltcomandos que estavam disponíveis no Debian, e não o comportamento convencional do haltcomando em geral.

    Leitura adicional

    • Jonathan de Boyne Pollard (2018-12-07). Bug#586709: fechado por Thomas Goirand . Erro Debian #586709.
    • Jessie Smith (2019-03-08). initscripts: haltcomportamento alterado não intencional do comando . Erro Debian #743555.
    • 3

relate perguntas

  • Configuração do GRUB para reconhecer diferentes ambientes de desktop (instalações) da mesma distribuição Linux

  • astyle não altera a formatação do arquivo de origem

  • Recebendo e-mail em um novo Debian fresco

  • Debian Stretch: gnome-software segfault em libgs_plugin_systemd-updates.so

  • Como digitar ü no Pinyin IME?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve