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.

zang3tsu
fonte
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.

Emil
fonte
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'.
Alicia
fonte
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.

danny
fonte
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
vmule
fonte
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)

Daniel F
fonte
-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.

William Edwards
fonte
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