| 1 | #!/bin/bash |
|---|
| 2 | #/** |
|---|
| 3 | #@file poweroffconf |
|---|
| 4 | #@brief Control de parada tras tiempo de inactividad para ahorro de energía. |
|---|
| 5 | #@license GNU GPLv3+ |
|---|
| 6 | #@param int_minutos Minutos de inactividad (opcional); "no" para deshabilitar.. |
|---|
| 7 | #@note La comprobación periódica debe ejecutarse en el "cron" del sistema. |
|---|
| 8 | #@note Fichero de configuración: /etc/poweroff.conf |
|---|
| 9 | #@author Ramón Gómez - Univ. Sevilla |
|---|
| 10 | #@date 2011-10-25 |
|---|
| 11 | #@version 1.0.5: incluir opción para deshabilitar ahorro de energía. |
|---|
| 12 | #@author Ramón Gómez - Univ. Sevilla |
|---|
| 13 | #@date 2014-02-07 |
|---|
| 14 | #@version 1.1.1: Corregir problema al cambiar de día |
|---|
| 15 | #@author Ramón Gómez - Univ. Sevilla |
|---|
| 16 | #@date 2018-07-04 |
|---|
| 17 | #*/ |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | # Variables generales. |
|---|
| 21 | OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} # Instalación de OpenGnsys |
|---|
| 22 | OGETC=${OGETC:-$OPENGNSYS/etc} # Configuración de OpenGnsys |
|---|
| 23 | POWEROFFCONF=/etc/poweroff.conf # Configuración del script |
|---|
| 24 | |
|---|
| 25 | # Error si no existe el fichero de configuración de ahorro de energía. |
|---|
| 26 | if [ ! -f $POWEROFFCONF ]; then |
|---|
| 27 | ogRaiseError $OG_ERR_NOTFOUND "$POWEROFFCONF" |
|---|
| 28 | exit $? |
|---|
| 29 | fi |
|---|
| 30 | # Obtener parámetros de configuración de ahorro de energía. |
|---|
| 31 | source $POWEROFFCONF |
|---|
| 32 | export TZ |
|---|
| 33 | |
|---|
| 34 | case $# in |
|---|
| 35 | 0) # Sin parámetros, comprobar que existe la variable POWEROFFSLEEP. |
|---|
| 36 | if [ -z "$POWEROFFSLEEP" ]; then |
|---|
| 37 | ogRaiseError $OG_ERR_FORMAT "Sin tiempo de espera." |
|---|
| 38 | exit $? |
|---|
| 39 | fi |
|---|
| 40 | ;; |
|---|
| 41 | 1) # Nuevo timepo de espera. |
|---|
| 42 | POWEROFFSLEEP="$1" |
|---|
| 43 | # Se deshabilita si se introduce la cadena "no" como tiempo de espera. |
|---|
| 44 | [ "$POWEROFFSLEEP" == "no" ] && POWEROFFSLEEP= |
|---|
| 45 | # Error si tiempo de espera no es nulo o entero positivo. |
|---|
| 46 | if [[ ! "$POWEROFFSLEEP" =~ ^[0-9]*$ ]]; then |
|---|
| 47 | ogRaiseError $OG_ERR_FORMAT "Parámetro debe ser núm. minutos o \"no\" para deshabilitar." |
|---|
| 48 | exit $? |
|---|
| 49 | fi |
|---|
| 50 | # Actualizar fichero de configuración con nuevo periodo de parada. |
|---|
| 51 | perl -pi -e "s/POWEROFFSLEEP=.*/POWEROFFSLEEP=$POWEROFFSLEEP/" $POWEROFFCONF |
|---|
| 52 | # Si se necesita, recalcular tiempo de parada. |
|---|
| 53 | if [ -n "POWEROFFTIME" ]; then |
|---|
| 54 | # Asignar tiempo de apagado si no está deshabilitado y actualizar fichero. |
|---|
| 55 | POWEROFFTIME=${POWEROFFSLEEP:+$(date --date="$POWEROFFSLEEP min" +"%s")} |
|---|
| 56 | perl -pi -e "s/POWEROFFTIME=.*/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF |
|---|
| 57 | fi |
|---|
| 58 | exit 0 ;; |
|---|
| 59 | *) # Error de formato de ejecución. |
|---|
| 60 | ogRaiseError $OG_ERR_FORMAT "Formato: $0 [int_minutos | no]" |
|---|
| 61 | exit $? ;; |
|---|
| 62 | esac |
|---|
| 63 | # Comprobar si hay algún script en ejecución (verificando compatibilidad de "pgrep"). |
|---|
| 64 | [ -n "$(pgrep -fa 2>&1 | grep "invalid")" ] && PGREP="pgrep -fl" || PGREP="pgrep -fa" |
|---|
| 65 | if [ -n "$($PGREP $OPENGNSYS | egrep -v "$OGETC|$0")" ]; then |
|---|
| 66 | # Eliminar tiempo de inicio de espera, si se está ejecutando operación. |
|---|
| 67 | perl -pi -e 's/POWEROFFTIME=.*$/POWEROFFTIME=/' $POWEROFFCONF |
|---|
| 68 | else |
|---|
| 69 | # Si el sistema está en estado de espera, ... |
|---|
| 70 | NOW=$(date +"%s") |
|---|
| 71 | if [ -z "$POWEROFFTIME" ]; then |
|---|
| 72 | # Asignar tiempo de inicio, si no estaba definido. |
|---|
| 73 | POWEROFFTIME=$(date --date="$POWEROFFSLEEP min" +"%s") |
|---|
| 74 | perl -pi -e "s/POWEROFFTIME=.*$/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF |
|---|
| 75 | else |
|---|
| 76 | # Apagar el equipo si se sobrepasa el periodo de espera. |
|---|
| 77 | if [ $NOW -ge $POWEROFFTIME ]; then |
|---|
| 78 | $OPENGNSYS/scripts/poweroff |
|---|
| 79 | fi |
|---|
| 80 | fi |
|---|
| 81 | fi |
|---|
| 82 | |
|---|