Erstellen und Ausführen eines Jobs, der unbegrenzt ausgeführt wird
Erfahren Sie, wie Sie einen „ Code Engine “-Job erstellen und ausführen, der unbegrenzt laufen kann und bei dem kein Zeitlimit abläuft.
Normalerweise sind Jobs so konzipiert, dass sie einmal ausgeführt und mit einer maximalen Ausführungszeit beendet werden.
Angenommen, Sie möchten einen Datenspeicher eines anderen Anbieters ständig abfragen. Sie können eine Anwendung erstellen. Der App-Port muss jedoch offen bleiben, um HTTP-Anfragen zu verarbeiten. Wenn Sie keine HTTP-Anfragen bearbeiten möchten, können Sie stattdessen einen Job erstellen, der ohne maximale Ausführungszeit ausgeführt wird und keine Zeitüberschreitung aufweist.
Mit Code Enginekönnen Sie den Modus Ihres Jobs auswählen. Verwenden Sie den Standardmodus task für Jobs, für die eine maximale Ausführungszeit gilt. Für diese Jobs werden fehlgeschlagene Instanzen gemäß der Jobwiederholungsbegrenzung
erneut gestartet.
Wenn Sie einen Job erstellen möchten, der unbegrenzt ausgeführt werden kann und kein Zeitlimit hat, verwenden Sie den Modus daemon für Ihre Jobs. In diesem Modus wird das Zeitlimit für Ausführungen des Jobs nicht überschritten und
alle fehlgeschlagenen Instanzen werden automatisch unbegrenzt erneut gestartet.
Wenn Sie den daemon-Modus zum Ausführen von Jobs verwenden und möchten, dass Code Engine den Job bei einem Fehler automatisch erneut startet, stellen Sie sicher, dass Ihr Code mit einem Exit-Code ungleich null gestoppt wird. Wenn
das Container-Image, das Ihrem Dämonjob zugeordnet ist, mit einem 0-Exit-Code endet, geht Code Engine davon aus, dass der Job absichtlich gestoppt und nicht erneut gestartet wurde. Wenn der Job aus einem unerwarteten Grund fehlschlägt
und das Container-Image, das Ihrem Dämonjob zugeordnet ist, mit einem Exit-Code ungleich null beendet wird, startet Code Engine den Dämonjob automatisch erneut. Siehe Warum wird mein Dämonjob nicht automatisch erneut gestartet.
Bei „ Code Engine “ zahlen Sie nur für die Ressourcen, die Sie tatsächlich nutzen. Wenn Ihr Job im Modus daemon ausgeführt wird, beachten Sie, dass der Job immer ausgeführt wird, bis Sie den Job löschen.
Job erstellen und ausführen, der unbegrenzt über die Konsole ausgeführt wird
In diesem Beispiel werden die Beispiele aus dem „ IBM Cloud Code Engine “ verwendet, insbesondere das Beispiel „ helloworld “. Wenn Sie einen Job erstellen,
der auf das Beispiel icr.io/codeengine/helloworld verweist, und den Modus daemon angeben, wird dieser Job ohne maximale Ausführungszeit ausgeführt und fehlgeschlagene Instanzen werden unbegrenzt erneut gestartet.
Wenn der Modus nicht angegeben ist, wird der Job standardmäßig im Modus task ausgeführt.
-
Erstellen Sie Ihren Job
- Öffnen Sie die Code Engine-Konsole.
- Wählen Sie „ Mit der Erstellung beginnen “.
- Wählen Sie ein Projekt aus der Liste der verfügbaren Projekte aus. Sie können auch ein neues erstellen. Bitte beachten Sie, dass Sie über ein ausgewähltes Projekt verfügen müssen, um einen Job erstellen zu können.
- Wählen Sie Job aus.
- Geben Sie einen Namen für den Job ein. Beispiel:
myjob. - Wählen Sie den auszuführenden Code aus. Sie können Ihren Job aus einem Image in einer öffentlichen Registry, in einer privaten Registry oder in IBM Cloud Container Registry erstellen. Sie können Ihren Job auch aus Repository oder lokalem Quellcode erstellen. Verwenden Sie für dieses Beispiel das Beispielimage Code Engine,
icr.io/codeengine/helloworld. - Geben Sie im Abschnitt Ressourcen & Skalierung
daemonals Modus in den Einstellungen für Ausfallsicherheit an. Wenn Sie den Modusdaemonangeben, können Jobausführungen für diesen Job unbegrenzt ausgeführt werden und sie haben kein Zeitlimit. Für diese Jobausführungen gibt es kein Wiederholungslimit. Alle Jobausführungen für diese Jobs werden automatisch ohne Begrenzung erneut gestartet. - Klicken Sie auf Erstellen, um den Job zu erstellen.
-
Klicken Sie auf der Seite Jobs auf die Registerkarte Jobs, um eine Liste der definierten Jobs anzuzeigen. Klicken Sie auf den Namen Ihres Jobs, um die Konfiguration zu öffnen.
-
Führen Sie den Job aus.
- Klicken Sie auf Job übergeben, um das Dialogfenster 'Job übergeben' zu öffnen. Überprüfen Sie die Standardkonfigurationswerte, zum Beispiel Instanzen, CPU, Speicher, Anzahl der Jobversuche und Jobzeitlimit; Sie können diese Werte auch optional ändern. Weitere Informationen zu diesen Optionen finden Sie unter Optionen für Erstellung und Ausführung von Jobs.
- Klicken Sie auf Job übergeben, um den Job auszuführen. Der Status der Instanzen des Jobs wird vom System auf der Jobdetailseite angezeigt. Wenn eine der Instanzen Ihres Jobs nicht ausgeführt werden konnte, werden diese Instanzen automatisch unbegrenzt wiederholt.
Informationen zur Behebung häufiger Fehler bei Jobausführungsindizes finden Sie unter „ Gründe für das Scheitern von Jobausführungsindizes “.
-
(Optional) Protokolle der Jobausführung anzeigen. In der Konsole können Sie " auftragsprotokolle über die Konsole einsehen für Ihre Auftragsläufe eingeben. Beachten Sie in der Protokollausgabe für das Beispiel
helloworld, dass die UmgebungsvariableJOB_MODEden Modus des Jobs anzeigt.
Job erstellen und ausführen, der unbegrenzt mit der Befehlszeilenschnittstelle ausgeführt wird
Vorbereitende Schritte
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt und arbeiten Sie damit.
In diesem Beispiel werden die Beispiele aus dem „ IBM Cloud Code Engine “ verwendet, insbesondere das Beispiel „ helloworld “. Wenn Sie einen Job erstellen,
der das Beispiel icr.io/codeengine/helloworld referenziert, und auch --mode daemon angeben, wird dieser Job ohne maximale Ausführungszeit ausgeführt und fehlgeschlagene Instanzen werden unbegrenzt erneut gestartet.
Wenn der Modus nicht angegeben ist, wird der Job standardmäßig im Modus task ausgeführt.
-
Erstellen Sie den Job
myjob-daemon, der das Beispielimageicr.io/codeengine/helloworldverwendet. Um dieses Beispielimage als Job im Modusdaemonauszuführen, geben Sie--mode daemonan.ibmcloud ce job create --name myjob-daemon --image icr.io/codeengine/helloworld --mode daemonBeispielausgabe
Creating job 'myjob-daemon'...Die folgende Tabelle vermittelt Ihnen einen Überblick über die Optionen, die in diesem Beispiel beim Befehl
job createverwendet werden. Weitere Informationen zum Befehl und den zugehörigen Optionen finden Sie im Abschnitt über den Befehlibmcloud ce job create.Befehlsbeschreibung Option Beschreibung --nameDer Name des Jobs. Verwenden Sie einen Namen, der innerhalb des Projekts eindeutig ist. Dieser Wert ist erforderlich.
- Der Name muss mit einem alphanumerischen Kleinbuchstaben beginnen und enden.
- Der Name darf maximal 63 Zeichen lang sein und kann Buchstaben, Zahlen und Bindestriche (-) enthalten.
--imageDer Name des Images, das für Ausführungen dieses Jobs wird. --modeDer Modus für Ausführungen des Jobs. Gültige Werte sind „ task“ (Standard) und „daemon“. Im Modusdaemongibt es keinen Zeitlimitwert und fehlgeschlagene Instanzen werden unbegrenzt erneut gestartet. -
(Optional) Verwenden Sie den Befehl
job get, um Informationen zu Ihrem Job anzuzeigen.ibmcloud ce job get --name myjob-daemonBeispielausgabe
[...] 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 [...] -
Führen Sie den Job aus. Dieser Beispielbefehl führt die Jobausführung
myjobrun-daemonaus, die auf der Jobkonfigurationmyjob-daemonbasiert.ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon -
(Optional) Zeigen Sie die Details Ihrer Jobausführung an.
ibmcloud ce jobrun get --name myjobrun-daemonBeispielausgabe
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 -
(Optional) Protokolle für die Jobausführung anzeigen. Mit der Befehlszeilenschnittstelle können Sie Jobprotokolle anzeigen für alle Instanzen einer Jobausführung oder für eine bestimmte Jobausführungsinstanz. Im folgenden Beispiel werden Jobprotokolle für alle Instanzen der Jobausführung
myjobrun-daemonangezeigt.ibmcloud ce jobrun logs --name myjobrun-daemonBeispielausgabe
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
Nachdem der Job im Modus daemon erstellt wurde, wird er unbegrenzt ausgeführt. Da es kein Zeitlimit gibt und fehlgeschlagene Instanzen unbegrenzt erneut gestartet werden, sind die Optionen --maxexecutiontime und --retrylimit nicht zulässig, wenn Sie einen Job im Modus daemon ausführen.
Beachten Sie, dass die Umgebungsvariable JOB_MODE den Modus der Ausführungen des Jobs anzeigt.
Job stoppen, der unbegrenzt ausgeführt wird
Wenn Sie einen Job im Modus daemon ausführen, kann er unbegrenzt ausgeführt werden, da er ohne maximale Ausführungszeit ausgeführt wird und alle fehlgeschlagenen Instanzen automatisch unbegrenzt wiederholt werden. Um einen Job zu
stoppen, der sich im Modus daemon befindet, löschen Sie die bestimmte Jobausführung oder den Job.
Job, der unbegrenzt ausgeführt wird, über die Konsole stoppen
-
Um eine bestimmte Jobausführung zu löschen, rufen Sie die Jobseite für Ihren Job auf. Wechseln Sie zur Registerkarte Jobausführungen. Löschen Sie den Joblauf, den Sie entfernen möchten.
-
Um einen Job zu löschen, rufen Sie die Seite "Jobs" auf und klicken Sie auf den Namen des Jobs, den Sie entfernen wollen. Beim Löschen eines Jobs werden der Job, seine Konfiguration und alle ihm zugeordneten Jobausführungen gelöscht.
Job, der unbegrenzt ausgeführt wird, über die Befehlszeilenschnittstelle stoppen
-
Verwenden Sie den Befehl
jobrun delete, um eine bestimmte Jobausführung über die Befehlszeilenschnittstelle zu löschen. Optional können Sie die Option „-f“ verwenden, um das Löschen eines Auftragslaufs ohne Bestätigung zu erzwingen.ibmcloud ce jobrun delete --name myjobrun-daemon -fBeispielausgabe
Deleting job run 'myjobrun-daemon'... OK -
Um einen Job mit der Befehlszeilenschnittstelle zu löschen, verwenden Sie den Befehl
job delete. Optional können Sie die Option „-f“ verwenden, um das Löschen eines Auftrags ohne Bestätigung zu erzwingen. Wenn Sie einen Job löschen, werden auch alle Jobausführungen für den Job gelöscht. Im folgenden Beispiel wird der Jobmyjob-daemongelöscht.ibmcloud ce job delete --name myjob-daemon -fBeispielausgabe
Deleting job 'myjob-daemon'... OK