blob: de6726b4cd8a0797ebbe9e6064f3fbac8d0f8e77 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#!/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
|