trabajos cron con el mismo tiempo de ejecución

8

Supongamos que tengo varios trabajos cron configurados para ejecutarse al mismo tiempo: ¿se ejecutan en paralelo o solo uno tras otro?

(Mi caso es apretar Debian con cronjobs dentro de /etc/cron.d/mycronjobs).

Gabriele
fuente

Respuestas:

7

Para completar, los trabajos en, por ejemplo, /etc/cron.{hourly,daily,weekly,monthly} se ejecutan secuencialmente. El script run-parts recorre todos los archivos en este directorio.

02 4 * * * root run-parts /etc/cron.daily

Por lo tanto, puede usar eso en combinación con una convención de nomenclatura (similar a la numeración, /etc/init.d/rc*.dpor ejemplo) para asegurarse de que los trabajos se ejecuten secuencialmente.

Bram
fuente
¿Qué sucede si tengo varios trabajos cron dentro del mismo archivo, configurados para ejecutarse al mismo tiempo?
Gabriele
No estoy seguro de lo que quieres decir con "dentro del mismo archivo". Pero si quiere decir que tiene varias líneas con la misma especificación de tiempo (como la 0 * * * *que publicó anteriormente), como otras han publicado, no hay garantía sobre el orden en que se ejecutarán. Pueden ejecutarse en paralelo en un sistema de múltiples núcleos, AFAIK el orden en que se ejecutan puede ser diferente cada día. La convención de nomenclatura que mencioné en combinación con partes de ejecución o el uso de un script maestro que llama a los scripts de respaldo reales es la única forma de garantizar que los scripts se ejecuten en un orden particular.
Bram
Bien, ya que necesito asegurarme de que mis scripts se ejecutarán uno tras otro, creo que buscaré un "script maestro" activado por un trabajo cron y llamaré a cualquier script desde el script principal.
Gabriele
5

Las tareas enumeradas en cron se ejecutarán en paralelo, tal como suelen hacer los procesos. No hay forma de estar seguro de cuál comenzará primero, y no hay forma en cron de asegurarse de que la tarea A se haya completado antes de que comience la tarea B.

Sirch
fuente
1
Puede asegurarse de que la tarea A se haya completado antes de que comience la tarea B enumerándolas en la misma línea y separándolas con un punto y coma.
Nicholas
Eso no significa que la tarea A se haya completado con éxito. Tal vez podría usar un &&, pero algo como esto debería llevarse a cabo mediante un script llamado.
Sirch
Puede usar cualquier operando que soporte bash shell. Usando &&, ||, o; en cron es una práctica común en mi experiencia.
Nicholas
2

Cron es un demonio (servicio) que se ejecuta continuamente; sin embargo, lee crontabs una vez por minuto.

La secuencia exacta en la que se ejecutan los trabajos dependerá de la implementación del crond de sus sistemas.

Los archivos sueltos que algunas distribuciones colocan dentro de /etc/cron.d/ se analizan en busca de su configuración de temporizador cron, ya que estos archivos siguen la sintaxis normal de crontab (5).

El orden en que se ejecutan los trabajos individuales depende del cronograma que establezca para ellos, obviamente.

Adaptador
fuente
¿Qué pasa si la programación se establece así: ---- 0 * * * * root sh / var / opt / backup_scripts / backup1 - 0 * * * * root sh / var / opt / backup_scripts / backup2 ---- ¿Lo harán ejecutar secuencialmente, es decir, backup1 y, cuando haya terminado, backup2
Gabriele
La secuencia exacta en la que se ejecutan los trabajos dependerá de la implementación del crond de sus sistemas. man cron para más detalles.
Adaptr
man cron no dice nada al respecto (al menos en Debian).
Gabriele
2

Correrán en paralelo. Puede usar los siguientes métodos para ejecutar los procesos secuencialmente.

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
Nicholas
fuente