2 votes

Comment surveiller l'état de la séquence d'arrêt

Voici le script que j'ai fait pour verrouiller et éteindre mon système après 30 minutes.

#!/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 

Le problème avec ce script est que parfois il ne s'arrête pas même après 30 minutes.

C'est pourquoi j'ai ajouté un read à la fin - afin de surveiller l'état de la séquence d'arrêt ainsi qu'une fenêtre de progression. Mais ce script ne montre que l'état de la minute de démarrage.

eg :

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

The system is going down for halt in 30 minutes!

ça ne montre pas la progression de la fermeture.

ÉDITION :

J'ai également trouvé ce bug dans le script ci-dessus, Si un mauvais mot de passe est entré, le système se verrouille sans aucun avertissement. Est-il possible de donner une déclaration conditionnelle dans la commande shutdown. J'ai essayé ceci

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

Il active seulement l'arrêt mais pas l'économiseur d'écran.


WORKING script

Aucune solution trouvée pour valider l'arrêt (echo "$password" | sudo -kS shutdown -h +30 &) J'ai donc essayé de contourner ce problème en confirmant le mot de passe deux fois. C'est le script qui fonctionne.

#!/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

Ajout d'un formatage de texte supplémentaire et d'un code d'annulation d'arrêt également au script ci-dessus.

Si vous voulez également activer un lecteur de musique (par exemple Rhytmbox), alors après gnome-screensaver-command -a & ajoutez ce code rhythmbox-client --play &

Toute suggestion est appréciée

2voto

Tim Points 30349

Ce script contrôle la minuterie d'arrêt en utilisant les éléments suivants sleep et une boucle.

#!/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

1voto

solsTiCe Points 8656

Au lieu de cela, vous pouvez utiliser at commande. Installez-le avec

sudo apt-get install at

Et courir

sudo echo "shutdown -h now"|at  now + 30 min

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X