runcrons django git cron crontab

runcrons - django cron



¿Cómo se implementan los trabajos cron en producción? (8)

Tener tu proyecto bajo control de versión, incluido tu crontab.txt, es lo que prefiero. Entonces, con Fabric , es tan simple como esto:

@task def crontab(): run(''crontab deployment/crontab.txt'')

Esto instalará los contenidos de deployment/crontab.txt en el crontab del usuario que se conecta al servidor. Si no tiene su proyecto completo en el servidor, querría put primero el archivo crontab.

¿Cómo las personas implementan / controlan cronjobs para producción? Tengo más curiosidad sobre las convenciones / estándares que las personas usan que cualquier solución en particular, pero resulta que estoy usando git para el control de revisiones, y el cronjob está ejecutando un script de python / django.


Probablemente pueda usar algo como CFEngine / Chef para la implementación (puede implementar todo, incluidos los trabajos de cron)

Sin embargo, si hace esta pregunta, es posible que tenga muchos servidores de producción, cada uno ejecutando una gran cantidad de trabajos programados. Si este es el caso, probablemente desee una herramienta que no solo implemente tareas, sino que también rastree la falla de éxito, le permita ver fácilmente los registros de la última ejecución, ejecutar estadísticas, le permita cambiar fácilmente el cronograma de muchos trabajos y servidores a la vez (debido a mantenimiento planificado ...) etc.

Uso una herramienta comercial llamada "UC4". Realmente no lo recomiendo, así que espero que puedas encontrar un mejor programa que pueda resolver el mismo problema. Solo digo que la administración de trabajos no termina cuando los despliegas.


Si está utilizando Django, eche un vistazo al sistema de trabajos de django-command-extensions .

Los beneficios son que puede mantener sus trabajos dentro de la estructura de su proyecto, con control de versiones, escribir todo en Python y configurar crontab solo una vez.


Usando Fabric, prefiero mantener localmente una versión prístina de mi crontab, de esa forma sé exactamente lo que está en producción y puedo editar entradas fácilmente además de agregarlas.

La secuencia de comandos de estructura que uso se parece a esto (un código redactado, por ejemplo, que se encarga de las copias de seguridad):

def deploy_crontab(): put(''crontab'', ''/tmp/crontab'') sudo(''crontab < /tmp/crontab'')


En realidad, hay 3 opciones para implementar manualmente un crontab si no puede conectar su sistema a un sistema de administración de configuración como cfengine / puppet.

Simplemente podría usar crontab -u user -e pero corre el riesgo de que alguien tenga un error en su copiar / pegar.

También puede copiar el archivo en el directorio cron pero no hay ninguna verificación de sintaxis para el archivo y en Linux debe ejecutar touch / var / spool / cron para que crond pueda recuperar los cambios.

Nota: Todos olvidarán el comando táctil en algún momento.

Según mi experiencia, este método es mi forma manual favorita de implementar un crontab.

diff /var/spool/cron/<user> /var/tmp/<user>.new crontab -u <user> /var/tmp/<user>.new

Creo que el método que mencioné anteriormente es el mejor porque no corres el riesgo de copiar / pegar los errores, lo que te ayuda a mantener la coherencia con tu archivo controlado por la versión. Realiza la comprobación de la sintaxis de las tareas cron dentro del archivo, y no necesitará realizar el comando táctil como lo haría si simplemente copiara el archivo.


Yo uso Buildout para administrar mis proyectos de Django. Con Buildout, uso z3c.recipe.usercrontab para instalar trabajos cron en implementación o actualización.


Si está utilizando Fabric para deploment, puede agregar una función que edita su crontab.

def add_cronjob(): run(''crontab -l > /tmp/crondump'') run(''echo "@daily /path/to/dostuff.sh 2> /dev/null" >> /tmp/crondump'') run(''crontab /tmp/crondump'')

Esto agregaría un trabajo a tu crontab (descargo de responsabilidad: no probado y no muy idempotente).

  1. Guarde el crontab en un archivo de temp.

  2. Añade una línea al archivo tmp.

  3. Escribe el crontab de vuelta.

Es probable que esto no sea exactamente lo que quieres hacer, pero a lo largo de esas líneas podrías pensar en verificar el crontab en git y sobrescribirlo en el servidor con cada implementación. (si hay un usuario dedicado para su proyecto)