Versión 1.0 - marzo de 2012
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./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
/etc/anacrontab
la siguiente línea:1 2 saludos su - usuario-1 -c 'mail -s "Hola" usuario-2
</dev/null'
/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.cron
ni anacron
hacen
milagros así que el día que no se encienda el ordenador
no se ejecutará ninguna tarea diaria.