Programar tareas

Puedes ejecutar flujos de trabajo de corta duración ejecutándolos como tareas. En Ejecutar tareas se describe cómo ejecutar tareas en Aplicaciones.

También puedes programar tareas para que se ejecuten a intervalos recurrentes especificados con el formato cron para UNIX. Con las tareas programadas, primero insertas una aplicación que ejecuta la tarea, como harías con una tarea no programada, y luego creas un trabajo para programar la tarea.

Puedes definir una programación para que tu tarea se ejecute varias veces al día o en días y meses concretos.

Enviar una aplicación 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 aplicación.

    Envía la aplicación con el comando kf push APP_NAME --task. La marca --task indica que la aplicación se va a usar para ejecutar tareas, por lo que no se crearán rutas en la aplicación y no se desplegará como una aplicación de larga duración.

    kf push test-app --task
  3. Confirma que no se han creado instancias ni rutas de la aplicación mostrando la aplicación:

    kf apps

    Observa que la aplicación no se ha iniciado y no tiene URLs:

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

Crear un empleo

Para ejecutar una tarea de forma programada, primero debes crear un trabajo que describa la tarea:

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

El trabajo se inicia suspendido o sin programar, y no crea tareas hasta que lo ejecuta manualmente kf run-job o lo programa kf schedule-task.

Ejecutar una tarea manualmente

Los trabajos se pueden ejecutar de forma específica, de forma similar a las tareas de kf run-task. Esta opción puede ser útil para probar el trabajo antes de programarlo o ejecutarlo según sea necesario, además de la programación.

kf run-job test-job

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

Programar tareas

Para programar la ejecución del trabajo, debes proporcionar una programación cron de Unix en el comando kf schedule-job:

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

Este comando activa la tarea para que cree automáticamente tareas según la programación especificada. En este ejemplo, una tarea se ejecuta cada minuto.

Para actualizar la programación de una tarea, ejecuta kf schedule-task con una nueva programación. Los trabajos de Kf solo pueden tener una programación cron. Esto es diferente del programador de PCF, que permite programar varias tareas. Si necesitas varias programaciones cron, puedes hacerlo con varios trabajos.

Gestionar trabajos y programaciones

Para ver todas las tareas, tanto programadas como no programadas, del espacio actual, usa 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 se hayan programado activamente 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>

Observa que unscheduled-job no aparece en el resultado de kf job-schedules.

Cancelar la programación de una tarea

Puedes detener una tarea programada con el comando kf delete-job-schedule:

kf delete-job-schedule test-job

Este comando suspende el trabajo e impide que cree tareas según la programación anterior. La tarea no se elimina y kf schedule-job puede volver a programarla para que se siga ejecutando.

Eliminar un trabajo

Puedes eliminar todo el trabajo con el comando kf delete-job:

kf delete-job test-job

Este comando elimina el trabajo y todas las tareas que se hayan creado con él, tanto las programadas como las manuales. Si alguna tarea sigue en ejecución, este comando las eliminará por la fuerza.

Si quieres asegurarte de que las tareas en curso no se interrumpan, primero elimina la programación de las tareas con kf delete-job-schedule, espera a que se completen todas las tareas y, a continuación, elimina la tarea llamando a kf delete-job.