Para o Ubuntu 16.04+ usando o systemd (o padrão).
systemd-inhibit --why="Wait for this script to finish" bash script.sh
===
Teste:
$ systemctl poweroff
Operation inhibited by "bash script.sh" (PID 23912 "systemd-inhibit", user rinzwind),
reason is "Wait for this script to finish".
Please retry operation after closing inhibitors and logging out other users.
===
-
sleep
inibe a suspensão do sistema e a hibernação solicitada por usuários (não privilegiados) -
shutdown
inibe o desligamento do sistema de alto nível e a reinicialização solicitada por usuários (não privilegiados) -
idle
inibe que o sistema entre no modo ocioso, possivelmente resultando na suspensão ou desligamento automático do sistema, dependendo da configuração. -
handle-power-key
inibe o tratamento de baixo nível (ou seja, o login interno) da chave de hardware de energia do sistema, permitindo que o código externo (possivelmente sem privilégios) manipule o evento. -
handle-suspend-key
inibe a manipulação de baixo nível da chave de suspensão de hardware do sistema. -
handle-hibernate-key
inibe a manipulação de baixo nível da chave de hibernação do hardware do sistema. -
handle-lid-switch
inibe o manuseio de baixo nível do switch da tampa do hardware do systemd.
Você provavelmente também deseja evitar suspend
, idle
e hibernate
.
Exemplo de uso de "gerenciador de pacotes" :
fd = Inhibit("shutdown:idle", "Package Manager", "Upgrade in progress...", "block");
/* ...
do your work
... */
close(fd);
Similar a isso, você pode codificar sua versão e adicionar um "desligamento" no final deste script (ou adicionar uma maneira de determinar se um desligamento precisa ser a próxima ação).