83 lines
3.3 KiB
Bash
83 lines
3.3 KiB
Bash
#!/bin/bash
|
|
#/**
|
|
#@file poweroffconf
|
|
#@brief Control de parada tras tiempo de inactividad para ahorro de energía.
|
|
#@license GNU GPLv3+
|
|
#@param int_minutos Minutos de inactividad (opcional); "no" para deshabilitar..
|
|
#@note La comprobación periódica debe ejecutarse en el "cron" del sistema.
|
|
#@note Fichero de configuración: /etc/poweroff.conf
|
|
#@author Ramón Gómez - Univ. Sevilla
|
|
#@date 2011-10-25
|
|
#@version 1.0.5: incluir opción para deshabilitar ahorro de energía.
|
|
#@author Ramón Gómez - Univ. Sevilla
|
|
#@date 2014-02-07
|
|
#@version 1.1.1: Corregir problema al cambiar de día
|
|
#@author Ramón Gómez - Univ. Sevilla
|
|
#@date 2018-07-04
|
|
#*/
|
|
|
|
|
|
# Variables generales.
|
|
OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} # Instalación de OpenGnsys
|
|
OGETC=${OGETC:-$OPENGNSYS/etc} # Configuración de OpenGnsys
|
|
POWEROFFCONF=/etc/poweroff.conf # Configuración del script
|
|
|
|
# Error si no existe el fichero de configuración de ahorro de energía.
|
|
if [ ! -f $POWEROFFCONF ]; then
|
|
ogRaiseError $OG_ERR_NOTFOUND "$POWEROFFCONF"
|
|
exit $?
|
|
fi
|
|
# Obtener parámetros de configuración de ahorro de energía.
|
|
source $POWEROFFCONF
|
|
export TZ
|
|
|
|
case $# in
|
|
0) # Sin parámetros, comprobar que existe la variable POWEROFFSLEEP.
|
|
if [ -z "$POWEROFFSLEEP" ]; then
|
|
ogRaiseError $OG_ERR_FORMAT "Sin tiempo de espera."
|
|
exit $?
|
|
fi
|
|
;;
|
|
1) # Nuevo timepo de espera.
|
|
POWEROFFSLEEP="$1"
|
|
# Se deshabilita si se introduce la cadena "no" como tiempo de espera.
|
|
[ "$POWEROFFSLEEP" == "no" ] && POWEROFFSLEEP=
|
|
# Error si tiempo de espera no es nulo o entero positivo.
|
|
if [[ ! "$POWEROFFSLEEP" =~ ^[0-9]*$ ]]; then
|
|
ogRaiseError $OG_ERR_FORMAT "Parámetro debe ser núm. minutos o \"no\" para deshabilitar."
|
|
exit $?
|
|
fi
|
|
# Actualizar fichero de configuración con nuevo periodo de parada.
|
|
perl -pi -e "s/POWEROFFSLEEP=.*/POWEROFFSLEEP=$POWEROFFSLEEP/" $POWEROFFCONF
|
|
# Si se necesita, recalcular tiempo de parada.
|
|
if [ -n "POWEROFFTIME" ]; then
|
|
# Asignar tiempo de apagado si no está deshabilitado y actualizar fichero.
|
|
POWEROFFTIME=${POWEROFFSLEEP:+$(date --date="$POWEROFFSLEEP min" +"%s")}
|
|
perl -pi -e "s/POWEROFFTIME=.*/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF
|
|
fi
|
|
exit 0 ;;
|
|
*) # Error de formato de ejecución.
|
|
ogRaiseError $OG_ERR_FORMAT "Formato: $0 [int_minutos | no]"
|
|
exit $? ;;
|
|
esac
|
|
# Comprobar si hay algún script en ejecución (verificando compatibilidad de "pgrep").
|
|
[ -n "$(pgrep -fa 2>&1 | grep "invalid")" ] && PGREP="pgrep -fl" || PGREP="pgrep -fa"
|
|
if [ -n "$($PGREP $OPENGNSYS | egrep -v "$OGETC|$0")" ]; then
|
|
# Eliminar tiempo de inicio de espera, si se está ejecutando operación.
|
|
perl -pi -e 's/POWEROFFTIME=.*$/POWEROFFTIME=/' $POWEROFFCONF
|
|
else
|
|
# Si el sistema está en estado de espera, ...
|
|
NOW=$(date +"%s")
|
|
if [ -z "$POWEROFFTIME" ]; then
|
|
# Asignar tiempo de inicio, si no estaba definido.
|
|
POWEROFFTIME=$(date --date="$POWEROFFSLEEP min" +"%s")
|
|
perl -pi -e "s/POWEROFFTIME=.*$/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF
|
|
else
|
|
# Apagar el equipo si se sobrepasa el periodo de espera.
|
|
if [ $NOW -ge $POWEROFFTIME ]; then
|
|
$OPENGNSYS/scripts/poweroff
|
|
fi
|
|
fi
|
|
fi
|
|
|