FreeNAS: se apaga automáticamente cuando no se utiliza

cronjob de apagado
Ejecuta el guión cada 15 minutos para comprobar si todavía hay una máquina en marcha que pueda necesitar el NAS.

Si usas tu NAS en casa como yo, no lo necesitas activo todo el tiempo. Desafortunadamente, FreeNAS no tiene una función incorporada para apagar el NAS cuando no está en uso, es decir, ningún ordenador de la red está en línea. En Foro de FreeNAS y en el Foro Extremo del PCGH hay instrucciones sobre cómo usar un cronómetro para comprobar regularmente (compruebo cada 15 minutos) si un ordenador sigue respondiendo a un ping.

Más problemático es el arranque automático. Desafortunadamente FreeBSD (que es la base de FreeNAS) versión 8.2 no soporta Wake-On-LAN con la tarjeta de red incorporada de mi HP N36L. Esto puede ser resuelto con un FreeNAS parcheado a mano (lo cual es bastante complicado) o con otra tarjeta de red: mi elección fue la Intel EXPI9301CT PCI Expressque según varios informes debe ser apoyado y está disponible por 25, - Euro en el comercio. El guión, que he adaptado un poco, es originario del foro de FreeNAS y se puede encontrar detrás del enlace "más...". Después de eso, sólo necesita ser establecido como un trabajo cronológico.

#!/bin/bash
HOST1=192.168.0.33 #IP del primer PC
HOST2=192.168.0.35 #IP del segundo PC
ip_range=192.168.0. #Dirección de la red propia sin la parte del host
ip=40 1TP3Red de cheques de la dirección IP 40

...salida () {
caso $1 en
  1) eco "No se apaga - Al menos uno de los PCs está encendido" ;;
  2) eco "No hay PC en línea - Apagado" ; apagado -p ahora ;;
esac
salida $1;
}

# Comprueba si los ordenadores están encendidos
si [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] ;
entonces _salida 1; cancelar #, un PC está corriendo
# Si no hay ningún PC encendido, ve a comprobar si los PCs en el rango de IP están encendidos
más

# Comprueba si los PCs en el rango de IP están encendidos
  mientras que [ $ip -le 45 ] #check red a la unidad anfitriona 45
hacer
  ping -c 1 -i 1 $ip_range$ip #ping con la dirección IP compuesta de las variables anteriores "ip" e "i
  si [ `ping -c 1 -i 1 $ip_range$ip | grep -wc 100.0%` -eq 0 ] #Isi uno de los hosts responde al ping, no se apague
entonces _salida 1 1TP3Salida con la salida 1 (sin apagado)
fi
 ip=$(( $ip+1 )) 1TP3Altura de la porción del anfitrión siempre por 1
hecho

salida 2 # ningún PC ha respondido, apagado
fi

El guión tiene dos partes: la primera (hasta la línea 18) comprueba si uno de los ordenadores fijos está encendido. La parte de la línea 22 comprueba un rango de direcciones IP, en este ejemplo de 192.168.0.40 a 192.168.0.45. Lo que hay que tener en cuenta en general: también dispositivos como el iPhone o iPad devolvería un ping y evitaría que la NAS se apagara. Por lo tanto, en la mayoría de las redes, lo mejor será comprobar sólo unas pocas direcciones IP específicas y comentar la comprobación de un rango de direcciones IP.

Importante: la llamada del - en mi caso llamado shutdowncheck.sh - script debe hacerse con ruta absoluta, de lo contrario el cronjob no puede encontrarlo. En mi caso, lo siguiente debe ser ingresado como un trabajo temporal:

sh /mnt/Data/shutdowncheck.sh

Tan pronto como se entregue la nueva tarjeta de red, escribiré una actualización en consecuencia, que será sobre FreeNAS y Wake-On-Lan (abreviado WOL) - hasta entonces, el NAS se encenderá manualmente cuando sea necesario.

15 comentarios

  1. Hola,

    un gran puesto, justo lo que estaba buscando!

    Pero no funciona para mí. Lo probé con PuTTY, pero aparece este mensaje:

    no se encuentra

    /mnt/Data/General/shutdowncheck.sh: 8: Error de sintaxis: esperando "en

    ¿Qué hay de malo en eso?

      1. Volveré a publicar el guión completo esta noche, al menos para mí funciona con el actual FreeNAS. Lo que podría ser otro problema: los derechos del guión. Debe tener 755 para ser ejecutable (chmod +755 nombre de archivo)

        1. Tuvo el mismo problema al guardar el script en Windows, tienes que configurar el editor para que guarde el archivo con Unix EOL (fin de línea), de lo contrario no funciona e imprime el error.

  2. Hola

    He estado ejecutando el guión (similar a este) durante unos 2 años. Sólo que últimamente, mi nariz cuelga durante el apagado. Si la apago a mano y la despierto de nuevo con wol, todo funciona. ¿Alguien tiene alguna idea de a qué podría deberse esto?

    Bs: liberación de freenas 8.3.0

    1. ¿Quieres decir 9.3.0? Aparte de eso, actualmente tengo el problema de que el orden de arranque cambia cuando se apaga automáticamente. No debería suceder realmente - tal vez es algo similar para ti?

      1. No es ya 8.3.0 como ya está escrito, el guión funcionó bien durante un tiempo. Pero ahora el NAS se cuelga durante el cierre del guión. Si cierro el NAS a través de WebUi, esto no sucederá. ¿Te refieres a la orden de arranque en el Bios? No puedo imaginar que esto pueda tener una gran conexión.

        1. hm, pero eso es extraño - uso el script sin cambios con 9.3.0 (tren estable actual) en un HP N36L y hace exactamente lo que se supone que debe hacer.

          El problema con la orden de arranque fue que conecté un 5º disco duro al conector SATA para la unidad óptica. Desafortunadamente, esto alteró la secuencia de arranque, por la razón que sea.

          1. Estoy usando eso ahora mismo:

            #!/bin/bash

            HOST1=192.168.1.3
            HOST2=192.168.1.41
            HOST3=192.168.1.4 HOST4=192.168.1.4
            HOST5=192.168.1.4

            ...salida () {
            caso $1 en
            1) eco "No se apaga - Al menos uno de los PCs está encendido" ;;
            2) eco "No hay PC en línea - Apagado" ; apagado -p ahora ;;
            esac
            salida $1;
            }

            # Comprueba si los ordenadores están encendidos
            si [ `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 ] ; entonces _salida 1;

            # Si no hay un PC encendido, espera 10 segundos si se inicia uno nuevo.
            más
            echo "No hay PC en línea - espera 90 segundos"
            Dormir 90

            # comprueba los PC's de nuevo
            si [ `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 ] ; entonces _salida 1;

            # Si no hay un PC encendido, vaya a la salida del caso 2 (Apagado)
            más
            salida 2
            fi
            fi

  3. Hola,

    Hice el guión así en Freenas 9.3 y configuré el trabajo de cronometraje como este funciona hasta ahora. Pero cuando inicio el servidor, la carpeta y el archivo con el guión desaparecen. ¿Qué hice mal?

    1. ¿En qué directorio lo pusiste? El script debe ser almacenado en el banco de datos, el medio de arranque de FreeNAS no es adecuado para esto y probablemente es de sólo lectura de todos modos.

      1. Estoy usando eso ahora mismo:
        #!/bin/bash

        HOST1=192.168.1.3
        HOST2=192.168.1.41
        HOST3=192.168.1.4 HOST4=192.168.1.4
        HOST5=192.168.1.4

        ...salida () {
        caso $1 en
        1) eco "No se apaga - Al menos uno de los PCs está encendido" ;;
        2) eco "No hay PC en línea - Apagado" ; apagado -p ahora ;;
        esac
        salida $1;
        }

        # Comprueba si los ordenadores están encendidos
        si [ `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 ] ; entonces _salida 1;

        # Si no hay un PC encendido, espera 10 segundos si se inicia uno nuevo.
        más
        echo "No hay PC en línea - espera 90 segundos"
        Dormir 90

        # comprueba los PC's de nuevo
        si [ `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 ] ; entonces _salida 1;

        # Si no hay un PC encendido, vaya a la salida del caso 2 (Apagado)
        más
        salida 2
        fi
        fi

        1. Hola,

          Estoy tratando de ejecutar este script (ligeramente modificado por mí - el eco fue cambiado) en mi Pi de Frambuesa, pero me muestra que al menos un PC seguiría en línea, aunque todos estén apagados.

          ¿Tiene alguna idea de qué podría tratarse?
          LG

  4. Hola,
    Estoy intentando ejecutar el script en un XigmaNAS. Si lo ejecuto como un comando todo funciona correctamente, si lo inicio como un cronjob no se ejecutará. El problema es esta línea: if [ `ping -c 1 -i 1 $ip_range$ip | grep -wc 100.0%` -eq 0 ]

    ¿Alguien sabe el motivo?

    Saludos
    Stefan

Deje una respuesta

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *