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
Clona el repositorio test-app:
git clone https://github.com/cloudfoundry-samples/test-app test-app
cd test-app
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
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.