Cron vs temporizadores systemd


84

Recientemente se me señaló que existe una alternativa al cron, a saber, los temporizadores systemd.

Sin embargo, no sé nada sobre los temporizadores systemd o systemd. Solo he usado cron.

Hay una pequeña discusión en Arch Wiki . Sin embargo, estoy buscando una comparación detallada entre los crontemporizadores y systemd, centrándome en los pros y los contras. Utilizo Debian, pero me gustaría una comparación general de todos los sistemas para los que estas dos alternativas están disponibles. Este conjunto puede incluir solo distribuciones de Linux.

Aquí está lo que sé.

Cron es muy viejo y se remonta a fines de la década de 1970. El autor original de cron es Ken Thompson, el creador de Unix. Vixie cron, del cual los crons en las distribuciones modernas de Linux son descendientes directos, data de 1987.

Systemd es mucho más nuevo y algo controvertido. Wikipedia me dice que su lanzamiento inicial fue el 30 de marzo de 2010.

Entonces, mi lista actual de ventajas de cron sobre temporizadores systemd es:

  1. Cron está garantizado para estar en cualquier sistema similar a Unix, en el sentido de ser una pieza de software compatible instalable. Esto no va a cambiar. Por el contrario, systemd puede o no permanecer en las distribuciones de Linux en el futuro. Es principalmente un sistema init, y puede ser reemplazado por un sistema init diferente.

  2. Cron es simple de usar. Definitivamente más simple que los temporizadores systemd.

La lista correspondiente de ventajas de los temporizadores systemd sobre cron es:

  1. Los temporizadores de Systemd pueden ser más flexibles y capaces. Pero me gustaría ejemplos de eso.

Entonces, para resumir, aquí hay algunas cosas que sería bueno ver en una respuesta:

  1. Una comparación detallada de los temporizadores cron vs systemd, incluidos los pros y los contras del uso de cada uno.
  2. Ejemplos de cosas que uno puede hacer que el otro no.
  3. Al menos una comparación lado a lado de un script cron frente a un script de temporizadores systemd.

44
"Se garantiza que Cron estará en cualquier sistema similar a Unix. Eso no va a cambiar". - Debatiría mucho sobre esto. Si bien históricamente el cron a menudo se ha incluido en la configuración básica de las instalaciones de Unix, en la mayoría de los sistemas actuales es simplemente un paquete de software opcional arbitrario, entre otros. De hecho, existen varias alternativas cron populares (por ejemplo, anacron, fcron, jobber) que pueden ser preferibles a cron. La funcionalidad de cron no es esencial para la operación de un sistema de la manera en que systemd o init lo son, por lo que si le preocupa la portabilidad actual y futura, prefiero no apostarle.
Guido

66
Esa es una lista de cosas que quieres en una respuesta. Creo que tal vez deberías pasar un tiempo aprendiendo las herramientas tú mismo y ver si puedes formular esas respuestas por tu cuenta, y si tienes cosas específicas que no entiendes, pregúntales aquí.
larsks

55
Realmente no. He dicho todo lo que quiero decir sobre el tema. Entrar en una discusión extendida sobre cualquier cosa que involucre a systemd es peor que inútil: algunos piensan que los pequeños beneficios que trae systemd valen la monopolización corporativa del ecosistema de Linux. Otros no.
cas

77
"Cron es muy viejo y se remonta a fines de la década de 1970". Realmente correcto, pero completamente irrelevante siempre y cuando los paquetes en su sistema se mantengan de manera sensata y estable. El sol también es muy viejo, pero espero que eso no signifique que debamos reemplazarlo con algo más brillante y nuevo.
Oteo

55
@Otheus Creo que te estás equivocando de esa parte: decir que algo ha existido durante mucho tiempo no es un insulto. Al menos para mucha gente de Unix. Es más como decir que una casa tiene cientos de años de antigüedad, lo que sin duda significa que tendrá algunos problemas, algunas cosas serán extrañas por la modificación, pero también tiene un cierto encanto, y debe haber sido construido bien. No quiere decir que sea decrépita. Es una herramienta simple que ha demostrado ser útil durante cuatro décadas.
derobert

Respuestas:


43

Aquí hay algunos puntos sobre esos dos :

  1. verificar lo que realmente hace su trabajo cron puede ser un desastre, pero todos los eventos del temporizador systemd se registran cuidadosamente en el diario systemd como las otras unidades systemd en función del evento que hace las cosas mucho más fáciles.

  2. Los temporizadores systemd son servicios systemd con todas sus capacidades para la gestión de recursos, la programación de CPU de IO, ...
    Hay una lista:

    • filtros de llamada al sistema
    • ID de usuario / grupo
    • controles de membresía
    • buen valor
    • Puntaje OOM
    • Clase de programación IO y prioridad
    • Política de programación de CPU CPU
    • afinidad umask
    • pantalones de temporizador
    • bits seguros
    • acceso a la red y, ...
  3. con la opción de dependencias al igual que otros servicios systemd, puede haber dependencias en el tiempo de activación.

  4. Las unidades se pueden activar de diferentes maneras, también se puede configurar una combinación de ellas. los servicios pueden iniciarse y activarse por diferentes eventos como usuario, arranque, cambios de estado del hardware o, por ejemplo, 5 minutos después de que se conecte algún hardware y, ...

  5. configuración mucho más fácil de algunos archivos y etiquetas directas para hacer una variedad de personalizaciones basadas en sus necesidades con temporizadores systemd.

  6. Activa / desactiva fácilmente todo con:

    systemctl enable/disable 
    

    y matar a todos los hijos del trabajo con:

    systemctl start/stop
    
  7. Los temporizadores systemd se pueden programar con calendarios y tiempos monótonos, lo que puede ser realmente útil en caso de diferentes zonas horarias y, ...

  8. Los eventos de tiempo systemd (calendario) son más precisos que cron (parece precisión de 1)

  9. Los eventos de tiempo de systemd son más significativos, para aquellos recurrentes o incluso aquellos que deberían ocurrir una vez, aquí hay un ejemplo del documento :

    Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-*00:00:00
      Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
                    Wed *-1 → Wed *-*-01 00:00:00
            Wed-Wed,Wed *-1 → Wed *-*-01 00:00:00
                 Wed, 17:48 → Wed *-*-* 17:48:00 
    
  10. Desde el punto de vista del uso de la CPU, el temporizador systemd activa la CPU en el tiempo transcurrido, pero cron lo hace con más frecuencia.

  11. Los eventos de temporizador se pueden programar en función de los tiempos de finalización de las ejecuciones, se pueden establecer algunos retrasos entre ejecuciones.

  12. La comunicación con otros programas también es notable, a veces es necesario que otros programas conozcan los temporizadores y el estado de sus tareas.


2
Eso es un buen esfuerzo, gracias. Sin embargo, las comparaciones más directas con cron serían útiles, incluido un ejemplo. Además, parte de lo que escribe no está completamente claro, por ejemplo, "desde el punto de vista del uso de la CPU, el temporizador systemd activa la CPU en el tiempo transcurrido, pero cron lo hace con más frecuencia".
Faheem Mitha

Hola, @ F.sb! Su respuesta parece implicar que puede programar trabajos utilizando diferentes zonas horarias. ¿Es esto correcto? ¿Cómo lo harías tú? Sería una ventaja significativa sobre las implementaciones estándar de cron, pero no pude encontrar ninguna información al respecto, excepto por lo man systemd.timeque parece contradecirlo: las zonas horarias no locales, excepto UTC, no son compatibles.
Tad Lispy

Las dependencias son útiles. Por ejemplo, si la copia de seguridad del host se ejecuta como un temporizador systemd, puede usar dependencias para asegurarse de que la exportación de una base de datos se complete inmediatamente antes de la copia de seguridad.
vk5tu

66
Sea más honesto por adelantado. Comienza diciendo que estos son algunos puntos sobre los dos, y luego continúa enumerando las ventajas de su elección preferida . No es malo que tenga una preferencia, pero luego debe declararlo de antemano. Además de eso, el hecho de que es todo a favor de un sistema y no mira a los profesionales que el sistema tiene que me hace sentir esta respuesta es sesgada.
Jasper

2
@jasper querido, los uso en función de mis necesidades, y siempre es tu elección elegir uno en función de tus necesidades, acabo de mencionar algunos hechos basados ​​en documentos y manuales.
F.sb

16

Directamente de la boca del caballo, por así decirlo: https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

Un extracto de la página de arriba:

Beneficios

Los principales beneficios del uso de temporizadores provienen de que cada trabajo tiene su propio servicio systemd. Algunos de estos beneficios son:

  • Los trabajos se pueden iniciar fácilmente independientemente de sus temporizadores. Esto simplifica la depuración.
  • Cada trabajo se puede configurar para ejecutarse en un entorno específico (consulte systemd.exec (5)).
  • Los trabajos se pueden adjuntar a cgroups.
  • Los trabajos se pueden configurar para depender de otras unidades systemd.
  • Los trabajos se registran en el diario systemd para facilitar la depuración.

Advertencias

Algunas cosas que son fáciles de hacer con cron son difíciles de hacer solo con unidades de temporizador.

  • Complejidad: para configurar un trabajo cronometrado con systemd, crea dos archivos y ejecuta un par de comandos systemctl. Compare eso con agregar una sola línea a un crontab.
  • Correos electrónicos: no hay un equivalente incorporado al MAILTO de cron para enviar correos electrónicos por fallas en el trabajo. Consulte la siguiente sección para ver un ejemplo de configuración de un equivalente utilizando OnFailure =.

66
Errr ... no estoy seguro de cómo me siento acerca de una respuesta que es casi completamente copiar y pegar, especialmente porque las licencias no son compatibles. Pero como mínimo, debe arreglar ese bit de "ver la siguiente sección". Con ese error, parece que no leyó lo que copió y pegó.
derobert

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.