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

85

Planifico algunas tareas usando crontab.

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

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

seg.server.fault
fuente
3
Intenté buscar un tutorial de anacron en la web pero no pude encontrar ninguno bueno. Mirar las páginas de manual tampoco me ayudó mucho. ¿Cómo puedo cambiar el crontab ya existente para que se cambie a anacron? O cualquier tutorial en esto será muy útil
Seg.server.fault
1
He editado mi respuesta para incluir algunos ejemplos. ¡Espero que eso ayude!
Jeff

Respuestas:

70

Cuando su computadora se apaga (o el demonio cron no se está ejecutando), los trabajos cron no se iniciarán.

Si tiene trabajos que le gustaría ejecutar después del hecho durante esos momentos en que la computadora se apaga, use anacron. Instalado de forma predeterminada, consulte "man anacron", "man anacrontab" o el archivo / etc / anacrontab para obtener más información.

Ubuntu usa 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í mismo no se ejecuta como un demonio, sino que se basa en los scripts de inicio del sistema y cron para ejecutarse.

En el cuadro Ubuntu 8.04 que estoy viendo, /etc/init.d/anacron se ejecuta en el arranque, y nuevamente por cron cada mañana a las 07:30.

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

EJEMPLOS

Para trabajos simples "diarios", "semanales", "mensuales", coloque una copia o un enlace simbólico al script en uno de los directorios /etc/cron.{daily|weekly|monthly} arriba. Anacron se encargará de ejecutarlo diariamente / semanalmente / mensualmente, y si su computadora está apagada 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, suponiendo que tenga un script aquí: /usr/local/sbin/maint.sh

Y desea 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 su computadora no estaba encendida a las 00:00 del día 3 del mes, el trabajo no se ejecutaría hasta el día 6.

Para que el trabajo se ejecute el 4 cuando la computadora está apagada y "pierde" la ejecución el 3, debe usar esto en / etc / anacrontab (no olvide eliminar la línea de / etc / crontab):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

El "retraso" de "5" anterior significa que anacron esperará 5 minutos antes de ejecutar este trabajo. La idea es evitar que anacron dispare cosas inmediatamente al momento del arranque.

jeff
fuente
55
Por defecto, Ubuntu usa anacron.
3dinfluence
1
gracias, 3dincluence - respuesta ajustada para indicar qué crontabs son manejados por anacron en un setip predeterminado de ubuntu.
jeff
2
si coloca el script en /etc/cron.*/ en lugar de tener su propia entrada crontab, no tenga un "." en el nombre del archivo del script. debian y ubuntu usan run-parts para ejecutar dichos scripts, y por defecto run-parts ignorará los archivos con a. en el nombre del archivo, esto es para que no ejecute las versiones .dpkg-old y .dpkg-dist de los scripts que se renombran a partir de las actualizaciones. llame al script o al enlace simbólico "maint" en lugar de "maint.sh".
cas
OpenSUSE usa cronie por defecto desde 11.2 en adelante (hasta Tumbleweed / Leap 42.2 actualmente). Para usar anacron, instale el cronie-anacronpaquete.
palswim
13

Esto depende del planificador cron que use. El demonio básico, vanilla cron no ejecutará tareas que se perdieron debido al tiempo de inactividad del sistema. Sin embargo, hay otros programadores cron diseñados específicamente para esta situación que lo harán por usted. Los dos ejemplos más comunes son anacron y fcron .

Tyler McHenry
fuente
5

Las tareas programadas mientras la computadora está apagada no se ejecutarán cuando la computadora se vuelva a encender

Alan H
fuente
2

Si se apaga mientras se ejecutan los trabajos cron, el sistema se apaga y los trabajos cron se detienen (o no se ejecutan).

Una alternativa que puede consultar es anacron.

KPWINC
fuente
2

Realmente depende del cron deamon que estés ejecutando. Vixie-cron simplemente omitirá los cronjobs que se perdieron. fcron ejecutará crons perdidos tan pronto como pueda. IIRC también se basa en vixie-cron, por lo que si eso es lo que está buscando, puede consultar fcron.

Gregg
fuente