FreeNAS : s'éteint automatiquement lorsqu'il n'est pas utilisé

shutdown cronjob
Toutes les 15 minutes, exécutez le script qui vérifie si un autre ordinateur est en cours d'exécution et pourrait utiliser le NAS.

Si vous utilisez votre NAS à la maison comme moi, vous n'avez pas besoin qu'il soit actif en permanence. Malheureusement, FreeNAS ne propose pas de fonction permettant d'éteindre le NAS lorsqu'il n'est pas utilisé - c'est à dire lorsqu'aucun ordinateur du réseau n'est en ligne. Sur Forum FreeNAS et dans le Forum extrême du CPGH il y a des instructions sur la façon d'utiliser un cronjob pour tester régulièrement (je vérifie toutes les 15 minutes) si un ordinateur répond toujours à un ping.

Le démarrage automatique est plus problématique. Malheureusement, FreeBSD (qui sert de base à FreeNAS) dans sa version 8.2 ne supporte pas le Wake-On-LAN avec la carte réseau embarquée de mon HP N36L. Cela peut être contourné avec un FreeNAS corrigé (ce qui est plutôt compliqué) ou avec une autre carte réseau : mon choix s'est porté sur la carte Intel EXPI9301CT PCI Expressqui, selon divers rapports, devrait être soutenu et est disponible dans le commerce pour 25 euros. Le script, que j'ai un peu adapté, provient à l'origine du forum FreeNAS et peut être trouvé derrière le lien "more...". Après cela, il suffit de le configurer comme un cronjob.

#!/bin/bash
HOST1=192.168.0.33 #IP du premier PC
HOST2=192.168.0.35 #IP du deuxième PC
ip_range=192.168.0. #Adresse réseau du propre réseau sans la partie hôte
ip=40 #check network à partir de l'adresse IP 40

_exit () {
cas $1 en
  1) echo "No shutdown - At least one of the PCs is switched on" ; ;
  2) echo "No PC online - Shutdown" ; shutdown -p now ; ;
esac
sortie $1 ;
}

# Vérifier si les PC sont en ligne
if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] ;
then _exit 1 ; # abort, a PC is running
# Si aucun PC n'est allumé, allez vérifier si les PC de la plage IP sont allumés.
sinon

# Vérifiez si les PC de la gamme IP sont allumés.
  while [ $ip -le 45 ] #check network to host share 45
faire
  ping -c 1 -i 1 $ip_range$ip #ping avec l'adresse IP composite des variables "ip" et "i" ci-dessus
  if [ `ping -c 1 -i 1 $ip_range$ip | grep -wc 100.0%` -eq 0 ] 1TP3Dès que l'un des hôtes répond au ping, ne l'arrêtez pas.
then _exit 1 #erminer avec la sortie 1 (pas d'arrêt)
fi
 ip=$(( $ip+1 )) #oujours augmenter la part d'hôte de 1
fait

_exit 2 # aucun PC n'a répondu, arrêt de la machine
fi

Le script comporte deux parties : la première (jusqu'à la ligne 18) vérifie si l'un des ordinateurs saisis de manière permanente est allumé. La partie à partir de la ligne 22 vérifie une plage d'adresses IP, dans cet exemple de 192.168.0.40 à 192.168.0.45. Ce que vous devez généralement garder à l'esprit : des appareils tels que les iPhones ou les iPad renvoie un ping et empêcherait le NAS de s'éteindre. Par conséquent, dans la plupart des réseaux, il est préférable de ne vérifier que quelques adresses IP spécifiques et de commenter la vérification d'une série d'adresses IP.

Important : l'appel du script - nommé shutdowncheck.sh dans mon cas - doit être fait avec un chemin absolu, sinon le cronjob ne pourra pas le trouver. Dans mon cas, il faut entrer ce qui suit comme cronjob :

sh /mnt/data/shutdowncheck.sh

Dès que la nouvelle carte réseau aura été livrée, j'écrirai une mise à jour en conséquence, traitant de FreeNAS et du Wake-On-Lan (WOL en abrégé) - d'ici là, le NAS sera allumé manuellement lorsqu'il sera nécessaire.

15 commentaires

  1. Bonjour,

    excellent article, juste ce que je cherchais !

    Cependant, cela ne fonctionne pas pour moi... Je l'ai testé avec PuTTY, mais ce message apparaît :

    : non trouvé

    /mnt/data/general/shutdowncheck.sh : 8 : Syntax error : expecting "in".

    Où est l'erreur ?

      1. Je posterai à nouveau le script complet ce soir - au moins, il fonctionne pour moi avec le FreeNAS actuel. Ce qui pourrait encore être un problème : les droits du scénario. Il doit avoir 755 pour être exécutable (chmod +755 nom de fichier).

        1. J'ai eu le même problème, lorsque vous sauvegardez le script sous Windows, vous devez paramétrer l'éditeur pour qu'il sauvegarde le fichier avec l'EOL (end of line) d'Unix sinon cela ne fonctionne pas et donne l'erreur.

  2. Bonjour

    J'ai fait fonctionner le script (similaire à celui-ci) pendant environ 2 ans. Dernièrement, mon nas se bloque lors de l'arrêt. Si je l'arrête manuellement et que je le réveille à nouveau avec wol, tout fonctionne. quelqu'un a-t-il une idée de ce que cela pourrait être ?

    Bs : version 8.3.0 de freenas

    1. Vous voulez dire 9.3.0 ? A part cela : j'ai actuellement le problème que l'ordre de démarrage change lorsqu'il s'éteint automatiquement. Cela ne devrait pas arriver - peut-être que c'est quelque chose de similaire pour vous ?

      1. Non, c'est déjà 8.3.0 comme déjà écrit, le script a fonctionné parfaitement pendant un certain temps, mais maintenant le NAS raccroche pendant l'arrêt du script. Si je ferme le NAS via le WebUi, cela ne se produit pas. Vous voulez dire l'ordre de démarrage dans le bios ? Je ne peux pas imaginer que cela puisse avoir un lien.

        1. hm, mais c'est étrange - j'exécute le script inchangé avec 9.3.0 (train stable actuel) sur un HP N36L et il fait exactement ce qu'il est censé faire.

          Le problème de l'ordre de démarrage vient du fait que j'ai fixé un 5ème disque dur sur le port SATA du lecteur optique. Malheureusement, cela a brouillé l'ordre de démarrage, pour une raison quelconque.

          1. C'est ce que j'utilise en ce moment :

            #!/bin/bash

            HÔTE1=192.168.1.3
            HÔTE2=192.168.1.41
            HOST3=192.168.1.4 HOST4=192.168.1.4
            HÔTE5=192.168.1.4

            _exit () {
            cas $1 en
            1) echo "No shutdown - At least one of the PCs is switched on" ; ;
            2) echo "No PC online - Shutdown" ; shutdown -p now ; ;
            esac
            sortie $1 ;
            }

            # Vérifier si les PC sont allumés.
            if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ;

            # Si aucun PC n'est allumé, attendez 10 secondes si un PC est en train de redémarrer.
            sinon
            echo "Aucun PC en ligne - Attendez 90 secondes".
            dormir 90

            # Vérifier à nouveau les PC
            if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ;

            # Si aucun PC n'est allumé, passez au cas de sortie 2 (Arrêt)
            sinon
            _exit 2
            fi
            fi

  3. Bonjour,

    J'ai fait le script comme celui-ci sur Freenas 9.3 et j'ai mis en place le cronjob et cela fonctionne pour l'instant. Mais lorsque je démarre le serveur, le dossier et le fichier contenant le script ont à nouveau disparu. Qu'est-ce que j'ai fait de mal ?

    1. Dans quel répertoire l'avez-vous placé ? Le script doit être stocké sur le pool de données, le support de démarrage de FreeNAS n'est pas adapté pour cela et probablement en lecture seule de toute façon.

      1. C'est ce que j'utilise en ce moment :
        #!/bin/bash

        HÔTE1=192.168.1.3
        HÔTE2=192.168.1.41
        HOST3=192.168.1.4 HOST4=192.168.1.4
        HÔTE5=192.168.1.4

        _exit () {
        cas $1 en
        1) echo "No shutdown - At least one of the PCs is switched on" ; ;
        2) echo "No PC online - Shutdown" ; shutdown -p now ; ;
        esac
        sortie $1 ;
        }

        # Vérifier si les PC sont allumés.
        if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ;

        # Si aucun PC n'est allumé, attendez 10 secondes si un PC est en train de redémarrer.
        sinon
        echo "Aucun PC en ligne - Attendez 90 secondes".
        dormir 90

        # Vérifier à nouveau les PC
        if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ;

        # Si aucun PC n'est allumé, passez au cas de sortie 2 (Arrêt)
        sinon
        _exit 2
        fi
        fi

        1. Bonjour,

          J'essaie d'exécuter ce script (que j'ai légèrement modifié - L'écho a été changé) sur mon Raspberry Pi, mais il me dit qu'au moins un PC serait toujours en ligne, même s'ils sont tous éteints.

          Avez-vous une idée de ce que cela pourrait être ?
          LG

  4. Bonjour,
    J'essaie de faire fonctionner le script sur un XigmaNAS. Si je l'exécute en tant que commande, tout fonctionne correctement, si je le lance en tant que tâche cron, il ne s'exécute pas. Le problème est cette ligne : if [ `ping -c 1 -i 1 $ip_range$ip | grep -wc 100.0%` -eq 0 ]

    Quelqu'un en connaît-il la raison ?

    Salutations
    Stefan

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *