Crontab

Cron es una utilidad que nos permite programar tareas en sistemas basados en Unix utilizando expresiones Cron. Las tareas en cron se definen en un crontab, que es un archivo de texto que contiene los comandos a ejecutar. La sintaxis utilizada en un crontab se describe más adelante en este artículo. Python nos presenta el módulo crontab para gestionar los trabajos programados a través de cron. Las funciones disponibles en él permiten acceder a cron, crear trabajos, establecer restricciones, eliminar trabajos y mucho más sin tener que escribir manualmente los archivos crontab. En este artículo, mostraremos cómo utilizar estas operaciones desde tu código Python.

Cron utiliza una sintaxis específica para definir los horarios. Consta de cinco campos, separados por espacios en blanco. Los campos son:

image1

  • Resaltar que este script solamente puede ser utilizado en un entorno linux.
  • Para la misma tarea en windows ver este tutorial.
  • Para eliminar la tarea después de haberla probado, estos son los pasos a seguir.
############################################################################################
##### ESTE SCRIPT SOLO PUEDE SER EJECUTADO EN UN ENTORNO LINUX                  ############
##### THIS SCRIPT CAN ONLY BE RUN IN A LINUX ENVIRONMENT                        ############
############################################################################################

from crontab import CronTab
import pwd
import os
import shutil

#/opt/jobs_offer must have permissions for the script to create the token.pickle file the first time. This is a dependency on email sending.
#They have to be absolute routes, change before using
def uploadScript():
    src_path = r"ruta_absoluta/script_lanzado.py"
    dst_path = r"/opt/carpeta_destino/script_lanzado.py"
    shutil.copy(src_path, dst_path)
    print('Copied all files')

def add_cron():
    cron = CronTab(pwd.getpwuid(os.getuid())[0]) # For current user
    # 8:00 am all days in the morning
    basic_command = "0 8 * * 0-6 python3 /opt/jobs_offer/jobs_offer_task.py"
    basic_iter = cron.find_command("jobs_offer_task")
    exists=False
    for item in basic_iter:
        if str(item) == basic_command:
            print("crontab job already exist", item)
            exists=True
            break

    if not exists:
        job = cron.new(command='python3 /opt/jobs_offer_task.py')
        job.minute.every(15)
        job.enable()
        cron.write()
    print('Job added to crontab, ok')

uploadScript()
add_cron()

Fuentes:

https://medium.com/@django.course/7-ways-to-execute-scheduled-jobs-with-python-47d481d22b91 https://linuxhint.com/delete-cron-job-linux/