Como monitorar o status da seqüência de desligamento

2

Este é o script que fiz para bloquear e desligar meu sistema após 30 minutos.

#!/bin/bash
# Read Password
read -s -p "Password: " password
echo
# shutdown and screensaver Command
echo "$password" | sudo -kS shutdown -h +30 &
gnome-screensaver-command -a &
read -p "Press any key to continue... " -n1 -s 

O problema com esse script é que às vezes ele não é encerrado depois de 30 minutos.

É por isso que eu adicionei um comando read no final - para monitorar o status da seqüência de desligamento, bem como uma janela de progresso. Mas este script mostra apenas o status do minuto inicial

por exemplo:

Broadcast message from root@eka-PC
    (unknown) at 10:31 ...

The system is going down for halt in 30 minutes!

não mostra o progresso do desligamento.

EDITADO:

Eu também encontrei este bug no script acima, Se uma senha errada for inserida, o sistema será bloqueado sem qualquer aviso. É possível fornecer uma instrução condicional no comando shutdown. Eu tentei isso

SHUTDOWN=$(echo "$password" | sudo -kS shutdown -h +30 &);
if [[ $SHUTDOWN -eq 0]]
then
gnome-screensaver-command -a &
read -p "Press any key to continue... " -n1 -s 
fi

Ele ativa apenas o desligamento, mas não o protetor de tela

SCRIPT DE TRABALHO

Nenhuma solução encontrada para validar o desligamento (echo "$password" | sudo -kS shutdown -h +30 &) , então tentei uma solução alternativa para esse problema confirmando a senha duas vezes. Este é o script de trabalho

#!/bin/bash

red='tput setaf 1'
green='tput setaf 2'
reset='tput sgr0'

echo "Activate screensaver and shutdowns the system in 30 minutes";
# Read Password
shut()
{
read -s -p "Password: " password1
read -s -p "Confirm Password: " password
echo
# Run Command
if [ "$password1" == "$password" ]
then
echo "$password" | sudo -kS shutdown -h +30 &
gnome-screensaver-command -a &
read -p "'echo $'\n> \n>'' ${green} To cancel shutdown, press C ${reset}'echo $'\n> \n>''" prompt

    if [[ $prompt =~ [cC](es)* ]]
    then
    echo "$password" | sudo -kS shutdown -c
    read -p "'echo $'\n> \n>''${red} Shutdown Cancelled ${reset}" -n1 -s
    fi
else
echo -e "\n${red} Wrong Password ${reset}, Re enter the password"
shut 
fi
}
shut

Adicionou também formatação de texto adicional e código de cancelamento de desligamento ao script acima.

Se você quiser ativar um reprodutor de música (por exemplo, Rhytmbox) também, depois de gnome-screensaver-command -a & adicionar este código rhythmbox-client --play &

Qualquer sugestão é apreciada

    
por Eka 20.05.2015 / 09:00

2 respostas

2

Este script controla o cronômetro de desligamento usando sleep e um loop.

#!/bin/bash
# Read Password
read -s -p "Password: " password
echo
# Send messages
for i in {0..5}
do
    echo "Shutdown in" $((30- i * 5)) "minutes"
    sleep 300
done
echo "Shutdown now" | wall
# shutdown and screensaver Command
echo "$password" | sudo -kS shutdown -h +30 &
gnome-screensaver-command -a &
read -p "Press any key to continue... " -n1 -s
    
por Tim 20.05.2015 / 09:17
1

Em vez disso, você pode usar o comando at . Instale-o com

sudo apt-get install at

E corra

sudo echo "shutdown -h now"|at  now + 30 min
    
por solsTiCe 20.05.2015 / 09:32