Uso de cron vs. servicio administrado por el sistema para tareas frecuentes

0

Si alguna tarea se ejecutara de manera precisa pero no necesaria, ¿cuáles serían los beneficios de usar cronvs. solo usar un servicio (por ejemplo, administrado por upstart) con un script de bucle como

#!/bin/sh
while true
do
    do_task
    sleep 3600
done

?

Con el día de hoy upstartpodemos seleccionar al usuario con el setuidcomando, y se puede configurar el arranque para reiniciar el script si muere, detenerlo si lo desea, etc.

¿Hay algún beneficio real de jugar con cron en esta situación?

Dronus
fuente

Respuestas:

1

Huir de Cron es "más ordenado". Para empezar, tomará menos recursos: su script consumirá recursos adicionales (se le viene a la memoria memoria para el shell, el temporizador y los Procesos adicionales y los descriptores de archivo). Si bien prácticamente las máquinas son increíblemente potentes, es menos elegante.

Cron también tiene una forma ordenada de manejar stdout -> correo electrónico o lo que sea, lo que podría ser útil para la depuración.

Si usa Cron, no necesita rellenar con diferentes privs, solo dígale a cron qué usuario usar.

Por supuesto, usar upstart tiene algunas ventajas: por ejemplo, es posible que desee un grado de aleatoriedad en las esperas o un cronograma de procesamiento que a Cron no le guste. Hay momentos en que una solución como esta es mejor que Cron, pero creo que son casos de esquina.

Si va a querer iniciar y detener el proceso y tener control de usuario, por ejemplo, Upstart puede ser una mejor manera de hacerlo.

davidgo
fuente
0

cron se usa cuando desea que un proceso se ejecute en un tiempo absoluto preciso (es decir, a las 3:15 AM todos los días o cada hora a las X: 05 más o menos) mientras su secuencia de comandos es relativa a la hora en que lo inicia. En su ejemplo, se ejecutará cada hora desde el momento en que lo inicie, lo que debería corresponder con la secuencia de arranque. Entonces, si su PC se inicia a las 1:05, tendrá su trabajo hecho en cada X: 05, mientras que si se inicia a las 3:36, tendrá su trabajo a las X: 36.

Si solo desea que se haga aproximadamente una vez por hora, entonces realmente no cambia, pero, por supuesto, puede ejecutarse en cualquier lugar entre el primer y el último minuto de una hora, dependiendo del arranque. En realidad, si su do_task es algo largo que lleva mucho tiempo, incluso puede terminar ejecutándose con menos frecuencia de una vez por hora (ya que el sueño se calcula al final de la tarea, por lo que si do_task tarda 30 minutos, do_task comenzará cada 1 : 30 horas en tu caso)

Por otro lado, usar cron si su sistema no siempre está activo, puede perder fácilmente algunos eventos (ya que se realizan justo cuando la condición es exacta). En este caso, se recomienda más anacron (ya que solo se ve el tiempo desde la última ejecución). Otra cosa es que cron de todos modos ejecutará el trabajo incluso si la ejecución anterior aún no terminó, lo que en algunos casos puede ser bueno o malo, mientras que su script no lo hará.

En pocas palabras: si necesita un crono definido y sabe que el tiempo suele ser mejor, si solo necesita una tarea periódica sin tiempos específicos, entonces puede ir por un arranque.

fede.evol
fuente