#!/bin/bash #/** #@file poweroffconf #@brief Control de parada tras tiempo de inactividad para ahorro de energía. #@param int_minutos Minutos de inactividad (opcional). #@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 #@warning License: GNU GPLv3+ #*/ # 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 source $POWEROFFCONF 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) #TODO Comprobar que el parámetro es entero positivo. # Nuevo timepo de espera. POWEROFFSLEEP=$1 perl -pi -e "s/POWEROFFSLEEP=.*/POWEROFFSLEEP=$POWEROFFSLEEP/" $POWEROFFCONF # Si se necesita, recalcular tiempo de parada. if [ -n "POWEROFFTIME" ]; then POWEROFFTIME=$(date --date="$POWEROFFSLEEP min" +"%H%M") 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]" exit $? ;; esac # Comprobar si hay algún script en ejecución. if [ -n "$(pgrep -fl $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 +"%H%M") if [ -z "$POWEROFFTIME" ]; then # Asignar tiempo de inicio, si no estaba definido. POWEROFFTIME=$(date --date="$POWEROFFSLEEP min" +"%H%M") 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