source: client/shared/bin/poweroffconf

qndtest
Last change on this file was beed37b, checked in by Ramón M. Gómez <ramongomez@…>, 6 years ago

#852: Using timestamp to calculate automatic power off time.

  • Property mode set to 100755
File size: 3.3 KB
Line 
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.
21OPENGNSYS=${OPENGNSYS:-/opt/opengnsys}  # Instalación de OpenGnsys
22OGETC=${OGETC:-$OPENGNSYS/etc}          # Configuración de OpenGnsys
23POWEROFFCONF=/etc/poweroff.conf         # Configuración del script
24
25# Error si no existe el fichero de configuración de ahorro de energía.
26if [ ! -f $POWEROFFCONF ]; then
27    ogRaiseError $OG_ERR_NOTFOUND "$POWEROFFCONF"
28    exit $?
29fi
30# Obtener parámetros de configuración de ahorro de energía.
31source $POWEROFFCONF
32export TZ
33
34case $# 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 $? ;;
62esac
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"
65if [ -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
68else
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
81fi
82
Note: See TracBrowser for help on using the repository browser.