Dans cet article nous allons mettre en place un script permettant de vérifier l’état d’une VM toutes les jours à 7 heures (via crontabs) et de la mettre sous tension si elle est hors tension.
Prérequis:
Avoir activé le service SSH sous l’hôte ESXi
Création du script
Avec l’aide de crontab, le script recherchera l’état de la VM toutes les 1 heure pour vérifier si les VM sont sous tension ou non.
1- Créez un script shell (power-on.sh) qui doit être placé dans un datastore vmfs, puis copiez-collez le script ci-dessous
vmname=”nom-vm″ vmid=$(vim-cmd vmsvc/getallvms | grep “$vmname” | awk ‘{print $1}’) stat1=$(vim-cmd vmsvc/power.getstate “$vmid” | grep “off”) if [ “$stat1” == “Powered off” ] then vim-cmd vmsvc/power.on “$vmid” fi
Remplacez « nom-vm » par le nom de la VM. Vous pouvez obtenir la liste des vm ainsi que leur nom en tapant la commande suivante une fois connecté à l’ESXi en SSH:
vim-cmd vmsvc/getallvms
Ce qui dans notre exemple donnera comme nom de VM srv-vpn ou W10:
2- Enregistrez le script et donnez-lui les droits d’exécution avec la commande suivante. Cette commande est à titre indicatif, le nom de votre datastore dépendra de votre installation.
chmod 755 /vmfs/volumes/SSD1/power-on.sh
Création de la tâche Cron
1- Ouvrer le fichier crontabs avec VI via la command suivante:
vi /var/spool/cron/crontabs/root
2- Ajouter la ligne suivante:
0 7 * * * /vmfs/volumes/SSD1/power-on.sh
Dans cet exemple nous voulons exécuter notre script tout les jours à 7h ce qui en crontab représente la valeur: « 0 7 * * * »
Pour une autre période, vous pouvez utiliser ce générateur.
3- Lancez la commande suivante pour trouver le numéro du processus crond en cours d’exécution (par exemple 12345) :
cat /var/run/crond.pid
4- Puis pour tuer le processus, utilisez la commande:
kill 12345
Remarque: Les modifications ci-dessus ne seront pas persistantes après un redémarrage de l’ESXi. Nous allons donc devoir ajouter quelques lignes à etc/rc.local.d/local.sh pour que l’ESXi les régénère après un redémarrage.
5- Ouvrer le fichier local.sh avec VI via la commande suivante:
vi /etc/rc.local.d/local.sh
6- À la fin du fichier juste au-dessus de « exit 0 », ajoutez les 3 lignes suivantes. La première tue le processus crond, la seconde ajoute notre tâche cron au fichier crontab et la troisième redémarre le service crond:
/ bin / kill $ (cat /var/run/crond.pid) / bin / echo '0 7 * * * /vmfs/volumes/lun1/power-on.sh' >> / var / spool / cron / crontabs / racine crond
Notez que nous avons repris la valeur « 0 7 * * * » pour exécuter notre script tout les jours à 7h.
7- Enregistrez le fichier et quittez avec :wq
8- Pour finir exécutez la commande « auto-backup.sh » pour que les changements de /etc/ rc.local.d/local.sh soit conservés après un redémarrage.