Creación y ejecución de un trabajo que se ejecuta indefinidamente
Aprende a crear y ejecutar una tarea de « Code Engine » que pueda ejecutarse de forma indefinida y no caduque.
Normalmente, los trabajos están diseñados para ejecutarse una vez y salir con un tiempo de ejecución máximo.
Sin embargo, suponga que desea sondear constantemente un almacén de datos de terceros. Puede optar por crear una aplicación; sin embargo, el puerto de la aplicación debe permanecer abierto para gestionar las solicitudes de HTTP. En su lugar, si no desea atender solicitudes de HTTP, puede optar por crear un trabajo que se ejecute sin un tiempo máximo de ejecución y que no se agote el tiempo.
Con Code Engine, puede elegir la modalidad del trabajo. Utilice la modalidad task predeterminada para los trabajos en los que se aplica un tiempo máximo de ejecución. Para estos trabajos, las instancias anómalas se reinician según
el límite de reintentos de trabajo.
Si desea crear un trabajo que se pueda ejecutar de forma indefinida y no se haya agotado el tiempo de espera, utilice la modalidad daemon para los trabajos. Con esta modalidad, las ejecuciones del trabajo no agotan el tiempo de espera
y las instancias anómalas se reinician automáticamente de forma indefinida.
Cuando utilice la modalidad daemon para ejecutar trabajos, si desea que Code Engine reinicie automáticamente el trabajo si se produce una anomalía, asegúrese de que el código se detiene con un código de salida distinto de cero. Si
la imagen de contenedor asociada con el trabajo daemon finaliza con un código de salida 0, Code Engine presupone que el trabajo se ha detenido intencionadamente y que el trabajo no se ha reiniciado. Sin embargo, si el trabajo falla
por una razón inesperada, y la imagen de contenedor asociada con las salidas de trabajo de daemon con un código de salida distinto de cero, Code Engine reinicia automáticamente el trabajo de daemon. Consulte ¿Por qué mi trabajo daemon no se reinicia automáticamente?
Con « Code Engine », solo pagas por los recursos que utilizas. Cuando el trabajo se ejecuta en modalidad daemon, tenga en cuenta que el trabajo siempre se está ejecutando hasta que suprima el trabajo.
Creación y ejecución de un trabajo que se ejecuta indefinidamente desde la consola
En este ejemplo se utilizan los ejemplos de « IBM Cloud Code Engine »; en concreto, el ejemplo « helloworld ». Cuando crea un trabajo que hace referencia
al ejemplo icr.io/codeengine/helloworld y también especifica la modalidad como daemon, este trabajo se ejecuta sin un tiempo de ejecución máximo y las instancias fallidas se reinician indefinidamente. Si no se especifica
la modalidad, de forma predeterminada, el trabajo se ejecuta en modalidad task.
-
Crear su trabajo
- Abra la consola de Code Engine.
- Selecciona « Empezar a crear ».
- Seleccione un proyecto de la lista de proyectos disponibles. También puede crear uno nuevo. Tenga en cuenta que debe tener un proyecto seleccionado para crear un trabajo.
- Seleccione Trabajo.
- Especifique un nombre para el trabajo; por ejemplo,
myjob. - Elija el código que desea ejecutar. Puede crear el trabajo a partir de una imagen en un registro público, un registro privado o en IBM Cloud Container Registry. También puede crear el trabajo desde el código fuente repositorio o local. Para este ejemplo, utilice la imagen de ejemplo Code Engine,
icr.io/codeengine/helloworld. - En la sección Recursos y escalado, especifique
daemonpara la modalidad en los Valores de resiliencia. Cuando se especifica la modalidaddaemon, las ejecuciones de trabajo para este trabajo se pueden ejecutar indefinidamente y no agotan el tiempo de espera. No hay límite de reintentos para estas ejecuciones de trabajo. Las ejecuciones de trabajos para estos trabajos se reinician automáticamente sin límite. - Pulse Crear para crear el trabajo.
-
En la página Trabajos, pulse la pestaña Trabajos para ver una lista de los trabajos definidos. Pulse el nombre del trabajo para abrir la configuración.
-
Ejecute el trabajo.
- Pulse Enviar trabajo para abrir el diálogo Enviar trabajo. Revise y, opcionalmente, cambie los valores de configuración predeterminados como, por ejemplo, instancias, CPU, memoria, número de reintentos de trabajo y tiempo de espera de trabajo. Para obtener más información, consulte Opciones para crear y ejecutar un trabajo.
- Pulse Enviar trabajo para ejecutar el trabajo. El sistema muestra el estado de las instancias del trabajo en la página de detalles del trabajo. Si alguna de las instancias del trabajo no se ha podido ejecutar, estas instancias se reintentan automáticamente de forma indefinida.
Para solucionar los errores habituales relacionados con los índices de ejecución de trabajos, consulta « Por qué pueden fallar los índices de ejecución de trabajos ».
-
(opcional) Ver registros de la ejecución del trabajo. Desde la consola, puede ' ver los registros de trabajos desde la consola para sus ejecuciones de trabajo. Observe en la salida de registro para el ejemplo
helloworldque la variable de entornoJOB_MODEmuestra la modalidad del trabajo.
Creación y ejecución de un trabajo que se ejecuta indefinidamente con la CLI
Antes de empezar
- Configure su entorno de CLI de Code Engine.
- Cree y trabaje con un proyecto.
En este ejemplo se utilizan los ejemplos de « IBM Cloud Code Engine »; en concreto, el ejemplo « helloworld ». Cuando crea un trabajo que hace referencia
al ejemplo icr.io/codeengine/helloworld y también especifica --mode daemon, este trabajo se ejecuta sin un tiempo máximo de ejecución y las instancias anómalas se reinician indefinidamente. Si no se especifica la
modalidad, de forma predeterminada, el trabajo se ejecuta en modalidad task.
-
Cree el trabajo
myjob-daemon, que utiliza la imagen de ejemploicr.io/codeengine/helloworld. Para ejecutar esta imagen de ejemplo como un trabajo en modalidaddaemon, especifique--mode daemon.ibmcloud ce job create --name myjob-daemon --image icr.io/codeengine/helloworld --mode daemonSalida de ejemplo
Creating job 'myjob-daemon'...En la tabla siguiente se resumen las opciones que se utilizan con el mandato
job createen este ejemplo. Para obtener más información sobre el mandato y sus opciones, consulte el mandatoibmcloud ce job create.Descripción del mandato Opción Descripción --nameEl nombre del trabajo. Utilice un nombre que sea exclusivo dentro del proyecto. Este valor es obligatorio.
- El nombre debe empezar y terminar con un carácter alfanumérico en minúsculas.
- El nombre debe tener 63 caracteres o menos y puede contener letras, números y guiones (-).
--imageEl nombre de la imagen que se utiliza para las ejecuciones del trabajo. --modeLa modalidad para las ejecuciones del trabajo. Los valores válidos son « task» (por defecto) y «daemon». En la modalidaddaemon, no hay ningún valor de tiempo de espera y las instancias anómalas se reinician indefinidamente. -
(opcional) Utilice el mandato
job getpara visualizar información sobre el trabajo.ibmcloud ce job get --name myjob-daemonSalida de ejemplo
[...] Name: myjob-daemon ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2d15h Created: 2022-04-14T16:10:11-04:00 Image: icr.io/codeengine/helloworld Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: daemon Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 [...] -
Ejecute el trabajo. Este mandato de ejemplo ejecuta la ejecución del trabajo
myjobrun-daemonque se basa en la configuración del trabajomyjob-daemon.ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon -
(opcional) Vea los detalles de la ejecución del trabajo.
ibmcloud ce jobrun get --name myjobrun-daemonSalida de ejemplo
Getting jobrun 'myjobrun-daemon'... Getting instances of jobrun 'myjobrun-daemon'... Getting events of jobrun 'myjobrun-daemon'... For troubleshooting information visit: https://cloud.ibm.com/docs/codeengine?topic=codeengine-troubleshoot-job. Run 'ibmcloud ce jobrun events -n myjobrun-daemon' to get the system events of the job run instances. Run 'ibmcloud ce jobrun logs -f -n myjobrun-daemon' to follow the logs of the job run instances. OK Name: myjobrun-daemon ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2d15h Created: 2022-04-14T16:10:11-04:00 Job Ref: myjob-daemon Image: icr.io/codeengine/helloworld Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Runtime: Mode: daemon Array Indices: 0 Array Size: 1 JOP_ARRAY_SIZE Value: 1 Max Execution Time: 7200 Retry Limit: 3 Status: Instance Statuses: Running: 1 Conditions: Type Status Last Probe Last Transition Pending True 27s 27s Running True 4s 4s Events: Type Reason Age Source Messages Normal Updated 4s (x3 over 26s) batch-job-controller Updated JobRun "myjobrun-daemon" Instances: Name Running Status Restarts Age myjobrun-daemon-0-0 1/1 Running 0 26s -
(opcional) Ver registros para la ejecución del trabajo. Con la CLI, puede ver registros de trabajo para todas las instancias de una ejecución de trabajo o para una instancia de ejecución de trabajo determinada. El ejemplo siguiente muestra registros de trabajo para todas las instancias de la ejecución del trabajo
myjobrun-daemon.ibmcloud ce jobrun logs --name myjobrun-daemonSalida de ejemplo
Getting logs for all instances of job run 'myjobrun-daemon'... Getting jobrun 'myjobrun-daemon'... Getting instances of jobrun 'myjobrun-daemon'... OK myjobrun-daemon-0-0/myjob-daemon: Hello from helloworld! I'm a batch job! Index: 0 Hello World from: . ___ __ ____ ____ ./ __)/ \( \( __) ( (__( O )) D ( ) _) .\___)\__/(____/(____) .____ __ _ ___ __ __ _ ____ ( __)( ( \ / __)( )( ( \( __) .) _) / /( (_ \ )( / / ) _) (____)\_)__) \___/(__)\_)__)(____) Some Env Vars: -------------- CE_DOMAIN=us-south.codeengine.appdomain.cloud CE_JOB=myjob-daemon CE_JOBRUN=myjobrun-daemon CE_SUBDOMAIN=glxo4k7nj7d HOME=/root HOSTNAME=myjobrun-daemon-0-0 JOB_INDEX=0 JOB_MODE=daemon KUBERNETES_PORT=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_SERVICE_HOST=172.21.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 z=Set env var 'SHOW' to see all variables
Ahora que el trabajo se ha creado en modalidad daemon, el trabajo se ejecuta indefinidamente. Puesto que no hay tiempo de espera y las instancias fallidas se reinician indefinidamente, las opciones --maxexecutiontime y --retrylimit no están permitidas cuando se ejecuta un trabajo en modalidad daemon.
Tenga en cuenta que la variable de entorno JOB_MODE muestra la modalidad de las ejecuciones del trabajo.
Detención de un trabajo que se ejecuta indefinidamente
Cuando ejecuta un trabajo en modalidad daemon, se puede ejecutar de forma indefinida, ya que se ejecuta sin un tiempo máximo de ejecución y las instancias fallidas se reintentan automáticamente de forma indefinida. Para detener
un trabajo que está en modalidad daemon, suprima la ejecución del trabajo específico o suprima el trabajo.
Detención de un trabajo que se ejecuta indefinidamente desde la consola
-
Para suprimir una ejecución de trabajo específica, vaya a la página de trabajo correspondiente a su trabajo específico. Vaya a la pestaña Ejecuciones de trabajo. Elimina la ejecución del trabajo que quieras eliminar.
-
Para suprimir un trabajo, vaya a la página Trabajos, pulse el nombre del trabajo que desea eliminar. Al suprimir un trabajo se suprime el trabajo, su configuración y cualquier ejecución de trabajo asociada con el trabajo.
Detención de un trabajo que se ejecuta indefinidamente con la CLI
-
Para suprimir un trabajo específico ejecutado con la CLI, utilice el mandato
jobrun delete. Si lo deseas, puedes utilizar la opción «-f» para forzar la eliminación de una ejecución de tarea sin necesidad de confirmación.ibmcloud ce jobrun delete --name myjobrun-daemon -fSalida de ejemplo
Deleting job run 'myjobrun-daemon'... OK -
Para suprimir un trabajo con la CLI, utilice el mandato
job delete. Si lo deseas, puedes utilizar la opción «-f» para forzar la eliminación de un trabajo sin necesidad de confirmación. Cuando suprime un trabajo, también se suprime cualquier trabajo que se ejecute para este trabajo. El ejemplo siguiente suprime el trabajomyjob-daemon,ibmcloud ce job delete --name myjob-daemon -fSalida de ejemplo
Deleting job 'myjob-daemon'... OK