J’ai déjà indiqué comment allumer/démarrer un PC à distance via le wakeonlan et comment éteindre un PC à distance via ssh.

Pour mon usage personnel j’ai intégré ces commandes dans des scripts afin d’y ajouter quelques fonctionnalités.

Le script de démarrage que j’ai nommé wakeonlan.sh (original) prend en paramètre l’adresse MAC et l’adresse IP de la machine à réveiller et permet de faire n essais de réveil espacés de m secondes avant de rendre la main.

#!/bin/bash
# Wake up remote machine
# Usage: $0 mac_adress ip_adress
 
# Check interval
SLEEPTIME=60
# Temp directory where to store a file to indicate that the computer was already turn on (used for shutdow)
TEMP_DIRECTORY=/$HOME/tmp
# Number of retries
RETRY=20
 
die () {
 echo >&2 "$@"
 exit 1
}
 
[ "$#" -eq 2 ] || die "Usage : $0 Mac_adress IP_adress"
HOST_MAC=$1
HOST_IP=$2
 
[ -d $directory ] || mkdir $directory
 
ping -c 2 -w 15 $HOST_IP > /dev/null
RESULT=$?
if [ $RESULT -eq 0 ]; then
 echo "Host $HOST_IP is already up - exiting"
 touch $TEMP_DIRECTORY/$HOST_IP
 exit 0
else  
 echo "Trying to wake up $HOST_IP"
 TEST_NUMBER=0
 while [ $RESULT -ne 0 ]; do
  TEST_NUMBER=`expr $TEST_NUMBER + 1`
  echo "Test #$TEST_NUMBER)"
  wakeonlan $HOST_MAC
  sleep $SLEEPTIME
  ping -c 2 -w 15 $HOST_IP > /dev/null
  RESULT=$?
  if [ $RESULT -ne 0 ] && [ $TEST_NUMBER -eq $RETRY ]; then
   echo "$RETRY retry unsuccessful - leave"
   exit 1
  fi
 done
fi

On pourra remarquer que si la machine est déjà allumé, le script crée un fichier portant son adresse IP, ce fichier est utilisé par le script d’arrêt.

Pour fonctionner ce script à besoin du paquet wakeonlan.

 

Ce dernier nommé shutdown.sh (encore original) n’arrête l’ordinateur que si ce dernier n’était pas déjà allumé avant le wakeonlan (état connu par la présence au non du fichier nommé de l’adresse IP de la machine à réveiller / éteindre)

#!/bin/bash
# Shutdown a remote machine
# Usage: $0 user ip_adress
 
# Temp directory where to check a file that indicate if the computer doesn't need to shutdown (file created by wakeonlan script)
TEMP_DIRECTORY=$HOME/tmp
 
die () {
 echo >&2 "$@"
 exit 1
}
 
[ "$#" -eq 2 ] || die "Usage : $0 user IP_adress"
 USER=$1
 HOST_IP=$2
 
if [ -f $TEMP_DIRECTORY/$HOST_IP ]
then  
 echo "The host $HOST_IP was already turned on so we don't shutdown it"
 rm $TEMP_DIRECTORY/$HOST_IP
 exit 0
fi
 
echo "Shuting down $HOST_IP"
ssh $USER@$HOST_IP "sudo shutdown -h now"

Ce script prend en paramètre l’adresse IP de la machine à éteindre et l’utilisateur qui  lancera la commande shutdown via SSH.

La machine cible doit avoir sudo (toujours le cas sur Ubuntu) et la commande shutdown ne doit pas demander de mot de passe (paramétré dans le sudoer)

 

Image par tom.z sous CC BY-NY-SA

Les commentaires sont fermés.