Como desativar o desligamento para que um processo importante não possa ser interrompido?


10

Qual é a maneira mais simples de desativar ou suspender temporariamente a reinicialização / desligamento quando um processo importante está em execução? O processo leva muito tempo para terminar e não pode ser pausado / retomado, então eu gosto de evitar desligar o PC enquanto estiver em execução. Ele é executado a partir do cron, a menos que eu verifique manualmente os processos em execução, não saberia que ele está sendo executado. Obrigado.


5
Possível duplicação: SO : Impede temporariamente o desligamento do Linux , as respostas sugerem os vários níveis em que isso pode ser feito, por exemplo, scripts de shell ou o gerenciamento de energia do ambiente de desktop.
sr_

Eu não acho que essa resposta seja específica o suficiente sem uma explicação dos níveis de execução ou um link para a explicação. Não está no U&L SE. Posso perguntar qual distro e versão você está usando?
BSD

Em vez de modificar o procedimento de desligamento, escreva um wrapper para que o trabalho indique seu término, envie por correio ou toque em um arquivo. Teste a conclusão do trabalho e execute o desligamento. (o cron envia a saída de seus trabalhos para o proprietário, mas isso pode ser ajustado).
BSD

Respostas:


1

Execute which shutdownpara ver onde está o caminho para o programa de desligamento. Você pode renomear o arquivo, embora eu recomende.

Outro método (mais seguro). Use um alias: alias shutdown=' ' algo assim é mais reversível. Se você estiver tentando impedir o desligamento de todos os usuários, adicione o alias globalmente.


Estou pensando em usar um alias, agora só tenho que escrever meu script. Obrigado!
Zang3tsu

E quanto a outros comandos, como parada ou desligamento. Você precisaria criar alias / renomeá-los também?
Mintyfreshpenguin

17

Para sistemas mais novos com systemd, isso foi resolvido por systemd-inhibit. Exemplo de uso:

systemd-inhibit --why="Doing weekly backup" bash my-backups.sh

Então, se um usuário tentar desligar, não será permitido, a menos que seja forçado.

❯ systemctl poweroff
Operation inhibited by "bash my-backups.sh" (PID 2414 "systemd-inhibit", user ntrrgc),
reason is "Doing weekly backup".
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl poweroff -i'.

Porém, existe esse problema: executá-lo como root de maneira não interativa ignorará os bloqueios. github.com/systemd/systemd/issues/2680
Alicia

Eu acho que você interpretou mal que relatório de bug, eles estão falando sobre a execução poweroffcomo root não-interativo
Ferrybig

Como interpretei corretamente o relatório de erro? : S
Alicia

2

Desative os comandos "shutdown / reboot / poweroff / halt / hostname" em servidores de missão crítica

chmod 0 /sbin/shutdown

então, se você precisar usá-lo, volte ao chmod chmod 0755.


11
Que tal halt, poweroffe systemctl poweroff?
Martin Ueding 11/08/19

1

Eu desativaria o comando no arquivo / etc / sudoers para que somente o root possa executá-lo.

em / etc / sudoers

# Cmnd alias specification
Cmnd_Alias     SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
vmule   ALL=(ALL:ALL) ALL, !SHUTDOWN

e quando tento executar o comando:

vmule@debian:~$ sudo /sbin/shutdown  -r now
Sorry, user vmule is not allowed to execute '/sbin/shutdown -r now' as root on debian.vm

você pode elaborar sua resposta? O desligamento pode não ser explicitamente especificado em / etc / sudoers.
Archemar 17/10

Claro, editei a resposta com uma explicação melhor. Cheers
vmule

0

Eu queria impedir que um usuário local desligasse um laptop durante uma atualização. Desabilitar o dispositivo de entrada era o melhor caminho a percorrer. Para mim, foi suficiente desativar o mouse, mas o teclado também pode ser desativado.

Claro que há uma desvantagem, o computador não pode ser usado durante esse período.

Desativar entrada de teclado e mouse no unix (em X)


-1

shutdowntambém é tecnicamente um aplicativo que você pode remover. Corra which shutdown. whiché um comando que mostra o caminho de um aplicativo. No meu caso, a saída é /sbin/shutdown. É um arquivo que você pode fazer rm shutdown. Ou, se você quiser desativá-lo, copie-o temporariamente, altere o nome e remova o arquivo original.

Você deve ter as permissões suficientes, se desejar rm shutdown. É somente leitura, por isso você pode receber um erro. Tente removê-lo como rootou se tentar necessário usar o comando rm shutdown.


3
Por que a -rbandeira? Você não precisará dele para um arquivo e, se digitar algo errado, ocorrerá um desastre.
MadTux 25/08/14
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.