Introducción
Hasta el momento, había visto aplicaciones que tenían la opción de apagar, suspender o hibernar el equipo, cuando terminaban una o varias operaciones, como puede ser descargar algunos archivos de internet, o realizar un renderizado de varias horas, o cualquier otro tipo de proceso que no necesita de nuestra presencia, y que requiera varias horas para completarlo. Sin embargo, hace unos días leí, en How-To Geek, sobre un comando que viene en la mayoría de las distribuciones que permite suspender tu equipo y despertarlo transcurrido un tiempo.
La verdad, es que nunca se me había ocurrido nada así, pero pensándolo un poco, para aquellos trabajos que requieren nuestra acción transcurrido un tiempo determinado, es una muy buena solución. Me refiero a un proceso, que dure por ejemplo un par de horas, transcurridas las cuales tengamos que tomar algún tipo de acción; la solución sería ejecutar este comando para que despertará al equipo dos horas antes que nosotros, de forma que cuando, nos pongamos cara al ordenador el trabajo esté completado.
Esta herramienta es especialmente útil si nuestro equipo se alimenta con batería y no tenemos disponible un punto de conexión disponible.
rtcwake
El comando en cuestión es rtcwake, un programa que nos permite poner nuestro sistema en estado de «letargo» hasta una determinada hora. Esta herramienta tiene la posibilidad de establecer el tipo de «letargo» que queremos utilizar, conforme a las estados definidos por la ACPI para el estado G1 – «sleeping«:
- standby, que se corresponde con el estado S1, definido en la ACPI, y que representa un ahorro mínimo de energía (aunque real). Las CPUs dejan de ejecutar instrucciones, pero se mantiene la alimentación tanto a las CPUs como a la memoria RAM. Este es el modo por defecto que tiene rtcwake.
- mem, se corresponde con el estado S3 (suspender a RAM), y representa un ahorro significativo de energía. Todo en el equipo se pone en estado de consumo mínimo de energía, excepto la memoria, que permanece en estado de auto refresco para mantener el contenido de la misma.
- disk, se corresponde con el estado S4 (suspender a disco), y es el que ofrece un mayor ahorro de energía. Se comporta igual que el estado S3, pero con un paso adicional que es el de escribir el contenido de la memoria a disco.
- off, se corresponde con el estado S5 (apagado), y que normalmente se ejecuta con «/sbin/shutdown», y aunque no está soportado por la ACPI, suele funcionar.
Uso y funcionamiento
El modo de uso de este comando es el siguiente:
rtcwake [-hvVluan] [-d device] [-m standby_mode] {-t time_t|-s seconds}
Las opciones para configurar rtcwake, son las siguientes:
- -v, información completa
- -h, muestra la información sobre el uso de la aplicación
- -V, muestra la información de la aplicación y sale
- -n, establece una alarma, suspende o espera a que se produzca la alarma
- -a, lee el modo del reloj de /etc/adjtime. que es la ubicación donde hwclock almacena la información. Este es la configuración por defecto
- -l, asume que el reloj hardware está establecido a la hora local, sin tener en cuenta el contenido de /etc/adjtime
- -u, asume que el reloj hardware está establecido a UTC (Universal Time Coordinated), sin tener en cuenta el contenido de /etc/adjtime
Si tu equipo tiene más de un RTC (esto es mas de un reloj en tu equipo), se puede especificar, utilizando la opción
- -d device donde device es el nombre del reloj (rtc1,rtc2,…)
Para indicar cuando se tiene que despertar lo puedes hacer de dos formas, o bien, indicando los segundos que deben transcurrir desde el momento que ejecutes el comando, o bien, indicando el número de segundos transcurriddos desde el uno de enero de 1970 a las 00:00 UTC, que para simplificar el proceso lo puedes hacer utilizando el comando «date». Así para indicar el día 25 de agosto de 2012, tendríamos que añadir date «+%s» -d «2012-08-25 06:30». Lo indico como 2012-08-25, porque es el modo más cómodo y es mas complicado cometer un error, dado que los anglosajones son mas dados a poner los meses antes que los días, y este comando funciona así. De esta manera evitaremos errores.
Con esto, las opciones que tenemos son:
- -s tiempo_t, donde tiempo_t, es el tiempo en segundos que transcurrirán desde ahora hasta que el sistema se inicie
- -t tiempo_t, donde tiempo_t, es el tiempo en segundos desde 01-01-1970…, hasta el momento en que queremos que se inicie el sistema, lo que es el tiempo en valor absoluto.Además tenemos que establecer el modo de letargo que queremos, de acuerdo a lo indicado anteriormente, añadiendo los siguientes modos adicionales:
- no, en el que no se suspende, solo se establece una alarma de inicio
- on, no se suspende pero se lee el RTC hasta que aparece la alarma. Se trata de un modo útil para realizar procesos de depuración
- disable, deshabilita la alarma que se haya definido con anterioridad
- show, muestra la información relatia a la alarma, con un formato como «alarm: off|on
De esta manera, si queremos que nuestro equipo se ponga en marcha mañana a las 08:15, pero sin suspenderlo de forma inmediata, podemos ejecutar (eso si como administrador) el siguiente comando:
sudo rtcwake -m no -t $(date +%s -d ‘tomorrow 08:15’)
Si queremos ver que la alarma está activada, y es correcta, ejecutaremos el siguiente comando:
sudo rtcwake -m show
Que nos devolverá algo como
alarm: on Tue Aug 21 06:14:55 2012
Si además queremos que cuando se reinicie el equipo se ejecute una aplicación (si son varias tendremos que crear un sencillo script), tendremos que unir al comando anterior el comando que queremos ejecutar. Por ejemplo, si queremos buscar en nuestro disco duro por bloques erróneos cuando se inicie, podemos ejecutar el siguiente comando:
sudo rtcwake -m no -t $(date +%s -d ‘tomorrow 08:15’) && sudo badblocks -v /dev/hda1 > bad-blocks
Así mismo, otro aspecto interesante destacado en el artículo de How-To Geek, es el de integrar rtcwake en «cron», para que todos los días tu ordenador se despierte a las 6:00.
Conclusiones
Desde luego, que se trata de una herramienta interesante a tener en cuenta, aunque hay que usarla con precaución y sobre todo ponerla en funcionamiento tras haber comprobado su correcto funcionamiento para no llevarte una sorpresa desagradable. Como cualquier cosa que programes para que entre en funcionamiento transcurrido un tiempo, tienes que prever las circustancias en las que se puede encontrar. Imaginate que programas para que tu portátil se ponga en marcha a las seis de la mañana y tu ese día llegues por la tarde, seguro que la batería se habrá agotado, pero podía ser peor…
Mas información | How-To Geek
hace tiempo que buscaba una solucion así para asociarlo con la automatización de vlc: http://www.unawebmaslibre.blogspot.com/2012/07/vlc-automatizacion.html