Existe algum comando / programa através do qual eu posso desligar meu sistema instantaneamente (1 a 5 segundos)?
Atualização (2015): Obrigado a quem sugeriu desligar usando a tomada. : D
Atualização (2016): o @technophile sugeriu que eu acrescentasse algumas informações à pergunta que descreve a natureza do problema - principalmente qual cenário eu estava tentando resolver. Aqui está o cenário para o qual essa pergunta foi feita há alguns anos.
Estávamos construindo um sistema para ser implantado em espaços públicos como (aeroportos, hotéis etc.). As pessoas podem usar esse sistema para navegar na Internet, verificar seus e-mails ou até fazer reservas etc. usando seus cartões de crédito. O sistema construído assegurava que um segundo usuário não pudesse obter informações (email, cartões de crédito) do usuário anterior desse sistema, mesmo que os softwares de keyloggers de alguma forma fossem instalados. Como o sistema estava se certificando disso? Bem, os detalhes não podem ser compartilhados porque não são informações públicas. mas desenvolvemos uma maneira de sempre ter um sistema operacional novo (como se tivesse sido instalado recentemente) para um novo usuário do sistema. O único problema foi que tivemos que desligar a máquina e trazê-la novamente assim que o primeiro usuário sair da máquina.
E eu queria que o desligamento fosse instantaneamente rápido (- é por isso que a pergunta) e a próxima inicialização também muito rápida, para as quais pesquisei e tentei um grande número de distribuições Linux, do Damn Small Linux ao Slackware, Debian etc. história separada.
fonte
Respostas:
fonte
Eu não sugiro fazer o seguinte se você não for forçado por razões realmente especiais:
É áspero, brutal e pode ser considerado um equivalente próximo de desconectar o cabo de alimentação ...
A maneira correta é
shutdown -h now
comsudo
antes quando necessário.Talvez eu deva dizer da maneira legal ; veja abaixo ou melhor tl; dr.
Algumas palavras a mais , também conhecida como A história, Capítulo I
No começo era o init e será até o fim.
Todo o Linux depende do carinho de init [ 1 ] [ 2 ] . No entanto, e não sem uma certa quantidade de ingratidão, houve um tempo em que o bom usuário root do Lord pode trair esse amor e de repente
kill
começar com uma-9
ordem incontestável ( ).( O Livro de Etiqueta prescreve que usuários de contagens, duques e marquês invoquem antes de a
sudo
).Então alguns bruxos fizeram um encanto para proteger init (do Livro de
man 2 init
)(Nossos espiões relatam [ U1 ] que o init lidará com 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Portanto, o bom usuário root do Lord aprende as notícias e altera o comando
kill -ABRT 1
ou,kill -SEGV 1
geralmente, gera um pânico do kernel e um core dump.Funciona porque o init é o primeiro processo a ser executado e leva o número PID 1 [ 2b ] .
Isso é inseguro, imprudente e você sente que é um arauto de mau presságio e uma maldição, mas se você não puder colocar as mãos materialmente e desconectá-lo ...
A maldição : não gravará no log, não matará todos os processos e aguardará seu término, não gravará no HDD atualizando adequadamente os inodes nem desmontará os sistemas de arquivos; nem se preocupe, isso salvará as opções das janelas gráficas e dos históricos de shell e muitas outras além da nossa imaginação ... como dissemos um equivalente próximo de desconectar o cabo de força ou a bateria de um laptop.
A maneira correta
"Non nobis, Domine, non nobis, sed nomini tuo da gloriam.", Lema dos cavaleiros templários.
A maneira legal (correta) é usar
shutdown
[ 3 ]mas com
-h now
eles não terão tempo suficiente para fazer tanto ...Algumas palavras a mais , também conhecida como A história, Capítulo II
Era uma vez alguns passos lógicos sentidos do céu sobre o povo unix:
De fato, hoje em dia, não confiamos mais na existência dos três Moirai [ 5 ] do mundo Linux ,
reboot
,poweroff
ehalt
[ 6 ] : a ciência moderna dels -l $(which poweroff halt reboot)
eo deman reboot
, os spreads nova luz sobre esta idade das trevas e nos revelar que existe apenas um comando verdadeiro que analisa todas as suas opções, para que finalmente possamos pedir ações que contradigam os nomes de seus comandos! (halt -p
oureboot -p
parapoweroff
,shutdown -r
parareboot
...)Agora que tudo parecia claro e acolhedor para todos, os rumores afirmam que [ 7 ] no submundo do conjunto de ferramentas systemd [ 8 ] uma revolução foi realizada, deixando inconsciente o mundo inteiro . Graças a um exército de calços de compatibilidade com versões anteriores , nem percebemos que reinicialização, desligamento automático, interrupção [ 6 ] e até telinit [ 9 ] e desligamento [ 3 ] já estão vinculados ao novo rei systemctl [ 10 ]. Por favor, ouça toda a história da voz original de JdeBP The Bard [ 9 ], porque não tenho mais fôlego.
Se você é um seguidor do culto ao Ubuntu, ainda pode permanecer ciente por um tempo de todas essas reivindicações [ 11 ] .
A Terra meio
halt -f
,init
,telinit
,systemctl
Pesquisa pela solução mais rápida do que o correto, mas de igual modo sábio.
Se você está com o systemd ou não, deve poder parar o computador sem invocar todos os procedimentos de rejeição corretos (e muito mais rápido):
halt -f
: especificando a opção-f
(observe que você precisa-f
evitar o procedimento de desligamento) com o comando acima, comsudo poweroff -f
ou talvez até comsudo reboot -f -h
. De fato, podemos lerman reboot
(e equivalentes) sobre a necessidade de especificar a opção-f
para evitar o encerramento:Além disso, você pode usar
telinit
[ 2b ] (ouinit
diretamente)dizer ao init para alterar o nível de execução ... mas se sim, por que não o mata diretamente?
Em systemd, você pode usar a opção dupla imprudente
--force --force
Leitura do manual do systemctl [ 10 ]
Ps> Inspire-se nas variantes da cauda JdeBP The Bard [ 7 ] .
fonte
Você pode desligar a máquina imediatamente sem sincronizar discos, escrevendo "o" em / proc / sysrq-trigger como root.
Como um shell script, seria algo como
Se você tiver permissões em / proc / sysrq-trigger, não precisará habilitá-lo através do sysctl. Essa opção afeta apenas o disparo pelo teclado.
Não recomendo fazer isso em uma máquina com qualquer sistema de arquivos que você queira ler mais tarde.
Eu uso isso no Google Compute Engine para abater instâncias de modelo antes da marca de dez minutos para maximizar a relação custo-benefício dos trabalhos de cluster, funciona muito bem.
fonte
b
em vez deo
reiniciar (relevante desde que a pergunta foi atualizada).Você precisa usar a combinação de teclas Magic SysRq
REISUB
.Repita comigo: " Criar elefantes é tão chato ... "
fonte
Isso deve funcionar nas distribuições mais comuns. Ao contrário de
shutdown
muitos sistemas, você pode executar isso como um usuário normal (não é necessário sudo).Editar: Leitura adicional:
shutdown
epoweroff
no Ubuntuhalt
,shutdown
epoweroff
em sistemas Unixfonte
Retirado de outro site SE:
Alt+ SysRq+ Bé reinicialização instantânea e Alt+ SysRq+ Oé desligamento instantâneo.
Referência: Aqui
fonte
Mantenha pressionada a tecla liga / desliga por cerca de 4 segundos, é bastante rápido.
fonte
Em certas distribuições linux, shutdown oferece a opção -n. (Veja homem desligado ). Certas distribuições (como o ubuntu, que usa o upstart em vez do sysvinit) não suportam sua flag no entanto, e essa flag é (como pode ser aprendido na página de manual) não isenta de riscos. Embora eu esteja usando isso há anos (no meu laptop, não me importo que todos os daemons sejam encerrados corretamente, ele só quer tudo morto e meu cache de disco liberado) (é mais rápido que um desligamento regular e mais seguro do que puxar o botão plug (e amigos)). Você pode ver se isso resolve o seu problema.
fonte
Eu usei esse pequeno script para desligar o sistema. Na verdade, é usado para uma brincadeira em uma máquina de "prototipagem": "Ei cara, vamos ver o que esse incrível .sh faz!"
(Este script imita o mesmo que pressionar Alt+ SysRq+ u/ s/o conforme explicado anteriormente.) É claro que não causo um encerramento anormal do sistema (tabelas mysql, etc, podem falhar), portanto, use somente em máquinas fictícias. Nota: A sincronização pode levar algum tempo. Vi que, se o sistema possui muita memória livre (para cache) e você copia vários arquivos em um pen drive, a sincronização leva mais tempo, mas eu o recomendo mesmo para uma brincadeira.
Editar: É melhor usar em
sync
vez de escrever 's' parasysrq-trigger
: writing 's' não bloqueará a execução do script; portanto, após solicitar que o cache seja gravado no disco, a máquina será desligada imediatamente. Ao contrário dosync
comando,sync
retornará após a conclusão do processo de gravação. Portanto, a execução do script será bloqueada até que a limpeza do cache seja concluída.fonte
SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done