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