Inicio

Versión 1.0 - marzo de 2012

Ejecutar una tarea diaria como usuario normal incluso si el ordenador no está siempre encendido

Queremos ejecutar una tarea todos los días (yo ejecuto Recordatorios y avisos por correo) incluso aunque el ordenador no esté todo el día encendido.

Por ejemplo, queremos que el usuario-1 envíe un correo de saludo todos los días al usuario-2 con el asunto "Hola". Para ello le decimos a cron que la ejecute poniendo este guión en /etc/cron.daily (lo llamamos como queramos y le damos permiso de ejecución):

#!/bin/bash
su - usuario-1 -c 'mail -s "Hola" usuario-2 </dev/null'
y controlamos en /etc/crontab a qué hora se ejecutan los guiones de /etc/cron.daily (suele ser habitual ejecutarlos cuando el ordenador tiene poca actividad, por ejemplo a las 6.25 horas). Si se apaga el ordenador, cuando se encienda de nuevo anacron comprobará si se han ejecutado las tareas de cron.daily de ese día y si no se han realizado las ejecutará un tiempo después del arranque conforme esté configurado en /etc/anacrontab (habitualmente cinco minutos), independientemente de que la tarea de cron.daily esté configurada en /etc/crontab para ejecutarse antes o después de la hora del arranque. Por tanto las tareas de cron.daily se ejecutarán a la hora prevista en /etc/crontab solo si el ordenador está todo el día encendido, si se apaga se ejecutarán al arrancar conforme esté configurado en /etc/anacrontab. Podemos reducir en /etc/anacrontab el tiempo para ejecutar cron.daily de cinco a dos minutos para que si encendemos y apagamos antes de los cinco minutos se ejecute la tarea.


También podemos poner el comando directamente en /etc/crontab (no necesitaríamos usar el comando su) en vez de poner un guión en cron.daily:

00 4 * * * usuario-1 mail -s 'Hola' usuario-2 </dev/null

pero en este caso tenemos que poner en /etc/anacrontab la siguiente línea:

1 2 saludos su - usuario-1 -c 'mail -s "Hola" usuario-2 </dev/null'

El inconveniente de este método es que recibiremos dos avisos si encendemos antes de la hora de /etc/crontab y cuando llegue dicha hora el ordenador sigue encendido. No obstante si configuramos la tarea de /etc/crontab para las 4.30 horas será difícil que ocurra (tendríamos que encender entre las 00.00 horas y las 4.30 y a las 4.30 debería estar encendido). La ventaja de este método es que nos permite separar las tareas de cron.daily de nuestra tarea.

Evidentemente ni cron ni anacron hacen milagros así que el día que no se encienda el ordenador no se ejecutará ninguna tarea diaria.

Inicio

HTML5 Powered