Programar tareas

Puedes ejecutar flujos de trabajo de corta duración si los ejecutas como tareas. En Ejecuta tareas, se describe cómo ejecutar tareas en apps.

También puedes programar las tareas para que se ejecuten en intervalos recurrentes especificados con el formato unix-cron. Con las tareas programadas, primero envías una app que ejecute la tarea como lo haces con una no programada y, luego, creas un trabajo para programar la tarea.

Puedes definir una programación de modo que tu tarea se ejecute varias veces al día, o en días y meses específicos.

Envía una app para ejecutar tareas programadas

  1. Clona el repositorio test-app:

    git clone https://github.com/cloudfoundry-samples/test-app test-app
    cd test-app
    
  2. Envía la app.

    Envía la app con el comando kf push APP_NAME --task. La marca --task indica que la aplicación está diseñada para usarse en la ejecución de tareas, por lo que no se crearán rutas en la app y no se implementará como una aplicación de larga duración.

    kf push test-app --task
    
  3. Para confirmar que no se crearon instancias o rutas de apps, enumera la app:

    kf apps
    

    Observa que la app no se inició y no tiene URL:

    Listing Apps in Space: test-space
    Name                     Instances  Memory  Disk  CPU   URLs
    test-app                 stopped    1Gi     1Gi   100m  <nil>
    

Crear un trabajo

Para ejecutar una tarea según una programación, primero debes crear un trabajo que describa la tarea:

kf create-job test-app test-job "printenv"

El trabajo se inicia suspendido o no se programa y no se crea la tarea hasta que kf run-job la ejecuta de forma manual o la programa kf schedule-task.

Ejecuta un trabajo de forma manual

Los trabajos pueden ejecutarse ad hoc de manera similar a la ejecución de tareas por kf run-task. Esta opción puede ser útil para probar el trabajo antes de programarlo o ejecutarlo según sea necesario, además del programa.

kf run-job test-job

Este comando ejecuta la tarea definida por el trabajo una sola vez de inmediato.

Programar un trabajo

Si deseas programar la ejecución del trabajo, debes proporcionar una programación unix-cron con el comando kf schedule-job.

kf schedule-job test-job "* * * * *"

Este comando activa el trabajo para crear tareas automáticamente en la programación especificada. En este ejemplo, se ejecuta una tarea cada minuto.

Puedes actualizar la programación de un trabajo si ejecutas kf schedule-task con una programación nueva. Los trabajos en Kf solo pueden tener una única programación cron. Esto difiere del programador de PCF que permite varios programas para un solo trabajo. Si necesitas varios programas de cron, puedes lograrlo con varios trabajos.

Administra trabajos y programas

Visualiza todos los trabajos, programados y no programados, en el espacio actual mediante el comando kf jobs:

$ kf jobs
Listing Jobs in Space: test space
Name               Schedule    Suspend  LastSchedule  Age  Ready  Reason
test-job           * * * * *   <nil>    16s           2m   True   <nil>
unscheduled-job    0 0 30 2 *  true     16s           2m   True   <nil>

Además, solo puedes ver los trabajos que están programados de forma activa con el comando kf job-schedules.

$ kf job-schedules
Listing job schedules in Space: test space
Name           Schedule   Suspend  LastSchedule  Age  Ready  Reason
test-job       * * * * *  <nil>    16s           2m   True   <nil>

Ten en cuenta que el unscheduled-job no aparece en el resultado kf job-schedules.

Cancela la programación de un trabajo

Puedes detener un trabajo programado con el comando kf delete-job-schedule:

kf delete-job-schedule test-job

Este comando suspende el trabajo y le impide crear tareas en el programa anterior. El trabajo no se borra y kf schedule-job puede volver a programarlo para continuar la ejecución.

Borrar un trabajo

Todo el trabajo se puede borrar con el comando kf delete-job:

kf delete-job test-job

Este comando borra el trabajo y todas las tareas que el trabajo creó, tanto las ejecuciones programadas como las manuales. Si hay tareas en ejecución, este comando las borra a la fuerza.

Si deseas asegurarte de que las tareas en ejecución no se interrumpan, primero borra la programación de trabajos con kf delete-job-schedule, espera a que se completen todas las tareas y, luego, llama al kf delete-job para borrar el trabajo.