151 votos

Programación de trabajos usando crontab, ¿qué sucederá si la computadora se apaga durante ese tiempo?

Programo algunas tareas usando crontab.

¿Qué sucederá si mi computadora se apaga o se apaga durante el tiempo en que cron estaba programado para hacer algo?

¿Cada trabajo de cron perdido se ejecuta después de que la computadora se enciende, o se ignoran los trabajos perdidos de ese día? Si los trabajos perdidos no se reanudan, ¿hay alguna forma de configurar cron para que ejecute las tareas perdidas después de que la computadora se encienda de nuevo?

3 votos

Intenté buscar un tutorial de anacron en la web pero no pude encontrar ninguno bueno. Revisar las páginas del manual tampoco me ayudó mucho. ¿Cómo puedo cambiar el crontab ya existente para que se cambie a anacron? Cualquier tutorial al respecto sería de gran ayuda.

1 votos

He editado mi respuesta para incluir algunos ejemplos. ¡Espero que eso ayude!

122voto

jeff Puntos 1466

Cuando tu computadora está apagada (o el demonio cron no está funcionando), los trabajos programados no se iniciarán.

Si tienes trabajos que te gustaría ejecutar después del hecho durante esos momentos en los que la computadora está apagada, utiliza anacron. Instalado por defecto, consulta "man anacron", "man anacrontab", o el archivo /etc/anacrontab para más información.

Ubuntu utiliza anacron por defecto para las entradas de crontab en:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

dejando que los crontabs restantes sean manejados por el demonio cron principal, específicamente:

/etc/crontab
/etc/cron.d
/var/spool/cron

NOTAS

Anacron en sí no se ejecuta como un demonio, pero depende de los scripts de inicio del sistema y el propio cron para ejecutarse.

En la caja de Ubuntu 8.04 que estoy viendo, /etc/init.d/anacron se ejecuta al inicio, y de nuevo por cron cada mañana a las 07:30.

El README en /usr/share/doc/anacron/README.gz tiene un poco más de información que la contenida en las páginas del manual.

EJEMPLOS

Para trabajos simples "diarios", "semanales", "mensuales", copia o crea un enlace simbólico al script en uno de los directorios /etc/cron.{daily|weekly|monthly} arriba mencionados. Anacron se encargará de ejecutarlo diaria/semanal/mensualmente, y si tu computadora está apagada en el día en que normalmente se ejecutarían los scripts "semanales", los ejecutará la próxima vez que la computadora esté encendida.

Como otro ejemplo, asumiendo que tienes un script aquí: /usr/local/sbin/maint.sh

Y deseas ejecutarlo cada tres días, la entrada estándar en /etc/crontab se vería así:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Si tu computadora no estaba encendida a las 00:00 el día 3 del mes, el trabajo no se ejecutará hasta el día 6.

Para que el trabajo se ejecute en el día 4 cuando la computadora está apagada y "pierde" la ejecución el día 3, debes utilizar esto en /etc/anacrontab (no olvides quitar la línea de /etc/crontab):

# periodo demora identificador-de-trabajo comando
3 5 maint-job /usr/local/sbin/maint.sh

La "demora" de "5" arriba significa que anacron esperará 5 minutos antes de ejecutar este trabajo. La idea es prevenir que anacron ejecute cosas inmediatamente al inicio.

5 votos

De forma predeterminada, Ubuntu utiliza anacron.

1 votos

Gracias, 3dinfluencia: respuesta ajustada para indicar qué crontabs son manejados por anacron en una configuración predeterminada de Ubuntu.

4 votos

Si colocas el script en /etc/cron.*/ en lugar de tener su propia entrada en crontab, no debes tener un "." en el nombre del archivo del script. Debian y Ubuntu utilizan run-parts para ejecutar dichos scripts, y por defecto run-parts ignorará los archivos con un "." en el nombre del archivo - esto es para que no ejecute las versiones .dpkg-old y .dpkg-dist de los scripts que han sido renombrados en actualizaciones. Por lo tanto, llama al script o al enlace simbólico "maint" en lugar de "maint.sh".

24voto

Zathrus Puntos 5385

Esto depende del planificador de tareas que utilices. El demonio cron básico no ejecutará tareas que se hayan perdido debido a la inactividad del sistema. Sin embargo, hay otros planificadores de tareas específicamente diseñados para esta situación que lo harán por ti. Los dos ejemplos más comunes son anacron y fcron.

9voto

Daniel Benamy Puntos 468

Las tareas programadas mientras la computadora está apagada no se ejecutarán cuando la computadora se encienda nuevamente

5voto

KPWINC Puntos 8349

Si apagas mientras los trabajos cron están en ejecución, el sistema se apaga y los trabajos cron se detienen (o no se ejecutan).

Una alternativa que puedes investigar es anacron.

3voto

gregf Puntos 276

Realmente depende del demonio cron que estás ejecutando. Vixie-cron simplemente omitirá las tareas cron que se hayan perdido. fcron ejecutará las tareas cron perdidas tan pronto como sea posible. Creo que también está basado en vixie-cron, por lo que si eso es lo que estás buscando, quizás quieras echar un vistazo a fcron.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X