Mit Ereignisproduzent mit periodischem Zeitgeber (Cron) arbeiten
Der Ereignisproduzent mit periodischem Zeitgeber (Cron) generiert in regelmäßigen Abständen ein Ereignis. Dieses Intervall kann in Minuten, Stunden, Tagen, Monaten oder einer Kombination mehrerer Zeitintervalle angegeben werden. Sie können „ Code Engine “-Apps, -Funktionen und -Jobs abonnieren, um Cron-Ereignisse zu erhalten.
Das Abonnement für periodische Timer-Ereignisse verwendet die Standard-Crontab-Syntax zur Angabe der Intervalldetails im Format „ * * * * * “, wobei die Felder für Minute, Stunde, Tag des Monats, Monat des Jahres und Wochentag stehen.
Wenn Sie beispielsweise ein Ereignis für Mitternacht planen möchten, geben Sie 0 0 * * * an. Wenn Sie ein Ereignis für jeden Freitag um Mitternacht planen möchten, geben Sie 0 0 * * 5 an.
Wenn Sie ein periodisches Timer-Ereignis abonnieren, müssen Sie für das Abonnement ein Ziel (App, Funktion oder Job) sowie einen Zieltyp angeben. Wenn Sie keinen Zeitplan angeben, gilt die Standardeinstellung * * * * * (jede Minute).
Code Engine Es gibt Kontingente für Abonnements mit periodischem Timer innerhalb eines Projekts sowie Abonnementbeschränkungen. Weitere Informationen zu Code Engine-Grenzwerte finden Sie unter Grenzwerte und Kontingente für Code Engine.
Ereignisse des periodischen Zeitgebers (Cron) für eine Anwendung abonnieren
Sie können über die Konsole oder die Befehlszeilenschnittstelle (CLI) mit periodischen Timer-Abonnements arbeiten.
Ereignisse werden als HTTP-POST-Anforderungen an Anwendungen gesendet. Weitere Informationen zu den in einem Ereignis enthaltenen Informationen finden Sie in Informationen zu HTTP-Headern und -Hauptteilen für Ereignisse.
Ereignisse des periodischen Zeitgebers (Cron) für eine Anwendung über die Konsole abonnieren
Sie können über die Konsole Abonnements für periodische Timer-Ereignisse für eine Anwendung erstellen und aktualisieren.
Vorbereitende Schritte
- Erstellen Sie ein Projekt.
- Erstellen Sie eine Anwendung. Erstellen Sie beispielsweise eine Anwendung mit dem Namen
myapp, die dasicr.io/codeengine/cron-Image verwendet. Dieses Bild wurde auf der Grundlage von „cron.go“ erstellt, das im Repository „Samples for IBM Cloud Code Engine “(GitHub ) verfügbar ist.
Führen Sie die folgenden Schritte aus, um über die Konsole ein Abonnement für ein periodisches Timer-Ereignis für eine Anwendung zu erstellen und zu aktualisieren.
-
Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
-
Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements.
-
Klicken Sie auf der Seite 'Ereignisabonnements' auf Erstellen, um Ihr Abonnement zu erstellen.
-
Führen Sie auf der Seite „Ereignisabonnement erstellen“ die folgenden Schritte aus:
- Wählen Sie für Ereignistyp die Kachel für den periodischen Zeitgeber aus. Klicken Sie auf Weiter.
- Geben Sie unter Allgemein einen Namen für das Abonnement des periodischen Zeitgebers an, z. B.
myptimer. Sie können optional Ereignisattribute angeben. Beachten Sie, dass die Ereignisattribute als HTTP-Header verfügbar sind, wenn der Ereigniskonsument des periodischen Zeitgebers eine Anwendung ist. Handelt es sich bei dem Ereigniskonsumenten um einen Job, stehen Ereignisattribute als Umgebungsvariablen zur Verfügung. Fahren Sie durch Klicken auf Weiter fort. - Geben Sie bei Zeitplan Informationen zur Zeitsteuerung für die Ereignisse an. Der Erzeuger für periodische Timer-Ereignisse verwendet die Standard-Crontab-Syntax, um die Intervalldetails festzulegen. Wählen Sie Ihr Intervall
unter den bereitgestellten Mustern aus oder geben Sie Ihren eigenen angepassten Cron-Ausdruck an. Ein Beispiel wäre
0 0 * * *; dieser Ausdruck gibt an, dass das Ereignis täglich um Mitternacht auftreten soll. Wählen Sie für das vorliegende Beispiel das Zeitplanmuster für jeden Tag, jede Stunde, jede Minute aus. Der Cron-Ausdruck wird übrigens automatisch für Sie generiert. Die Muster für Tag, Stunde und Minute sowie der Cron-Ausdruck sind in UTC (Coordinated Universal Time) angegeben. Falls Sie keinen Zeitplan angeben, sendet dieses Ereignisabonnement einmal pro Minute ein Ereignis. Es wird eine Liste der anstehenden geplanten Ereignisse angezeigt. Beachten Sie, dass diese anstehenden geplanten Ereignisse in Ihrer Zeitzone angezeigt werden. Fahren Sie durch Klicken auf Weiter fort. - Geben Sie bei Angepasste Ereignisdaten Daten an, die in den Hauptteil Ihrer Ereignisnachricht einbezogen werden sollen. Sie können die Nachricht als Klartext oder im base64-Format angeben. Geben Sie für dieses Beispiel
den Text
hello strangerals Hauptteil der Ereignisnachricht an. Wenn die Nachricht das base64-Format besitzt, können Sie angeben, dass die Nachricht beim Senden des Ereignisses decodiert werden soll. Sie können auch den Inhaltstyp für Ihre angepassten Ereignisdaten angeben. Fahren Sie durch Klicken auf Weiter fort. - Geben Sie bei Ereigniskonsument die Anwendung oder den Job für den Empfang von Ereignissen an. Beachten Sie, dass Sie eine Auswahl in einer Liste definierter Anwendungen und Jobs treffen können. Verwenden Sie für dieses
Beispiel die
myapp-Anwendung, die dasicr.io/codeengine/cron-Image referenziert. Falls Sie Ihre App oder Ihren Job noch nicht erstellt haben, können Sie den Namen Ihrer Anwendung oder Ihres Jobs sowie „ Erstellen Sie Ihre Anwendung “ oder „ Erstellen Sie Ihren Job “ angeben, nachdem Sie das Abonnement für den periodischen Timer erstellt haben. Nur bei Anwendungen können Sie optional einen Pfad angeben. Ereignisse werden standardmäßig an die Stamm-URL der Zielanwendung weitergeleitet. Durch die Angabe eines Pfades können Sie Ereignisse an ein anderes Ziel innerhalb der App senden. Wenn in Ihrem Subskriptionspfad beispielsweise/eventsangegeben ist, werden die Ereignisse anhttps://<base application URL>/eventsgesendet. Fahren Sie durch Klicken auf Weiter fort. - Überprüfen Sie unter Zusammenfassung die Einstellungen für das Ereignisabonnement des periodischen Zeitgebers und nehmen Sie bei Bedarf Änderungen vor. Wenn Sie bereit sind, klicken Sie auf „Erstellen“, um das Abonnement für den periodischen Timer anzulegen.
-
Nachdem Sie nun Ihr Abonnement für den periodischen Timer erstellt haben, rufen Sie die Seite „Ereignisabonnements“ auf, um eine Liste der definierten Abonnements anzuzeigen.
-
Um ein Abonnement zu aktualisieren, rufen Sie die Seite „Abonnement für den periodischen Timer“ auf. Klicken Sie auf der Seite 'Ereignisabonnements' auf den Namen des Abonnements, das aktualisiert werden soll.
-
Ändern Sie auf der Seite Ihres Abonnements für den periodischen Timer die Daten in der Ereignismeldung. Ändern Sie auf der Registerkarte Angepasste Ereignisdaten die Ereignisdaten in
hello sunshine. Klicken Sie auf Speichern, um Ihre Änderungen zu speichern. -
Da die
myapp-Anwendung auf die Beispielanwendungcronverweist, die Informationen in Protokolldateien ausgibt, können Sie die Protokolle anzeigen. Zeigen Sie die Anwendungsprotokolle für die Ereigniskonsumentenanwendungmyappan; Sie können feststellen, dass die Ereignisnachrichthello sunshinelautet. Weitere Informationen finden Sie unter Anwendungsprotokolle über die Konsole anzeigen.
Ereignisse des periodischen Zeitgebers (Cron) für eine Anwendung über die Befehlszeilenschnittstelle abonnieren
Vorbereitende Schritte
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt.
- Erstellen Sie eine Anwendung. Erstellen Sie beispielsweise eine Anwendung mit dem Namen
myapp, die dasicr.io/codeengine/cron-Image verwendet. Dieses Bild wurde auf der Grundlage voncron.goerstellt, das unter der Beispiele für das Repository „ IBM Cloud Code Engine GitHub “
ibmcloud ce application create --name myapp --image icr.io/codeengine/cron
Um Ihre Anwendung über die CLI mit dem Abonnement für den periodischen Timer zu verbinden, verwenden Sie den ibmcloud ce sub cron create Befehl.
ibmcloud ce sub cron create --name NAME --destination-type APP --destination APPLICATION_NAME --schedule CRON
Um beispielsweise ein Cron-Abonnement zu erstellen, das jeden Tag um Mitternacht ein Ereignis an eine App namens „ myapp “ sendet:
ibmcloud ce sub cron create --name mycronevent --destination-type app --destination myapp --schedule '0 0 * * *'
Sie müssen den Wert für den Zeitplan in Anführungszeichen einschließen, um sicherzustellen, dass er als gesamte Zeichenfolge behandelt wird.
In der folgenden Tabelle sind die Optionen zusammengefasst, die im vorherigen Beispiel beim Befehl sub cron create verwendet werden. Weitere Informationen zum Befehl und den zugehörigen Optionen finden Sie im
Abschnitt über den Befehl ibmcloud ce subscription cron create.
| Option | Beschreibung |
|---|---|
--name |
Der Name der Cron-Ereignisquelle. Dieser Wert ist erforderlich. |
--destination |
Der Name einer Anwendung oder eines Jobs von Code Engine im aktuellen Projekt, die/der die Ereignisse vom Ereignisproduzenten empfangen soll. Dieser Wert ist erforderlich. |
--destination-type |
Der Typ des Ziels (destination), in diesem Fall app. Der Standardwert ist app. |
--schedule |
Die Planung für die Häufigkeit der Ereignisauslösungen im Crontab-Format. Geben Sie beispielsweise */2 * * * * (im Zeichenfolgeformat) an, damit alle 2 Minuten ein Ereignis gesendet wird. Standardmäßig wird das Cron-Ereignis
jede Minute ausgelöst und ist auf die Zeitzone UTC gesetzt. Wenn Sie die Zeitzone ändern möchten, verwenden Sie die Option --time-zone. Dieser Wert ist optional. |
- Tipps zur Verwendung der
sub cron-Befehle -
- Ereignisse werden standardmäßig an die Stamm-URL der Zielanwendung weitergeleitet. Sie können Ereignisse an ein anderes Ziel innerhalb der App senden, indem Sie die Option
--pathverwenden. Wenn Ihre Subskription beispielsweise--path /eventsangibt, werden die Ereignisse anhttps://<base application URL>/eventsgesendet. - Die Datenmenge für periodische Timer-Ereignisse ist auf maximal 4096 Byte begrenzt. Wenn Sie also die Option
--dataoder die Option--data-base64verwenden, können Sie maximal 4096 Byte senden. Weitere Informationen finden Sie im Thema Grenzwerte und Kontingente für Code Engine. - Cron-Abonnements verwenden standardmäßig die Zeitzone
UTC. Sie können die Zeitzone ändern, indem Sie die Option--time-zonebeim Befehlsub cron createodersub cron updateangeben. Gültige Zeitzonenwerte finden Sie in der TZ-Datenbank. Beim Erstellen eines Abonnements mitkubectlohne Angabe einer Zeitzone ist zu beachten, dass dieUTC-Zeitzone zugewiesen wird. - Wenn Sie Ihren App- oder Jobereigniskonsumenten noch nicht erstellt haben, verwenden Sie die Option
--forcebeim Befehlsub cron create, um die Erstellung des Cron-Ereignisabonnements zu erzwingen. Sie können nach der Erstellung des Cron-Abonnements den Namen Ihrer Anwendung oder Ihres Jobs angeben und Ihre Anwendung erstellen oder Ihren Job erstellen .
- Ereignisse werden standardmäßig an die Stamm-URL der Zielanwendung weitergeleitet. Sie können Ereignisse an ein anderes Ziel innerhalb der App senden, indem Sie die Option
Um zu überprüfen, ob Ihr Cron-Abonnement erfolgreich erstellt wurde, führen Sie den Befehl ibmcloud ce sub cron get --name mycronevent aus.
Beispielausgabe
Getting cron source 'mycronevent'...
OK
Name: mycronevent
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 2m21s
Created: 2021-03-14T13:37:51-05:00
Destination Type: app
Destination: myapp
Schedule: 0 0 * * *
Time Zone: UTC
Ready: true
Events:
Type Reason Age Source Messages
Normal FinalizerUpdate 12s pingsource-controller Updated "mycronevent" finalizers
Anhand dieser Ausgabe können Sie erkennen, dass die Zielanwendung myapp heißt, der Zeitplan 0 0 * * * (täglich um Mitternacht) lautet und für den Bereitstatus (Ready) der Wert true angegeben ist.
Cron-Subskription über die CLI aktualisieren
Verwenden Sie zum Aktualisieren des Cron-Abonnements über die Befehlszeilenschnittstelle den Befehl ibmcloud ce subscription cron update.
Aktualisieren Sie zum Beispiel das Abonnement mycronevent, um den Zeitplan so zu ändern, dass alle 2 Minuten ein Ereignis an eine App namens myapp gesendet wird.
ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'
Um zu überprüfen, ob Ihr Cron-Abonnement erfolgreich aktualisiert wurde, führen Sie den Befehl ibmcloud ce sub cron get --name mycronevent aus. Der Zeitplan für das Abonnement ist aktualisiert.
Beispielausgabe
Getting cron source 'mycronevent'...
OK
Name: mycronevent
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 2m21s
Created: 2021-08-31T16:00:49-04:00
Destination Type: app
Destination: myapp
Schedule: */2 * * * *
Time Zone: UTC
Ready: true
Events:
Type Reason Age Source Messages
Normal PingSourceSynchronized 7s (x3 over 13m) pingsource-controller PingSource adapter is synchronized
Möchten Sie ein Lernprogramm ausprobieren? Weitere Informationen finden enthält der Abschnitt Ereignisse des periodischen Zeitgebers (Cron) abonnieren. Benötigen Sie weitere Codebeispiele? Schaut euch die Beispiele im Repository „ IBM Cloud Code Engine “ unter GitHub an.
Ereignisinformationen für eine Anwendung über die Konsole anzeigen
Gehen Sie folgendermaßen vor, um Informationen zu Ihren Ereignisabonnements anzuzeigen.
- Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
- Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements, um eine Liste der definierten Abonnements anzuzeigen.
Wenn Ihre Anwendung wie die cron-Beispielanwendung Informationen in Protokolldateien ausgibt, zeigen Sie die Protokolldateien für Ihre Ereigniskonsumentenanwendung an. Weitere Informationen finden Sie unter Anwendungsprotokolle über die Konsole anzeigen.
Ereignisinformationen für eine Anwendung über die Befehlszeilenschnittstelle anzeigen
Falls Ihre Anwendung Informationen in Protokolldateien ausgibt (wie die Beispielanwendung cron), zeigen Sie die Protokolldateien für Ihre Ereigniskonsumentenanwendung mit dem CLI-Befehl ibmcloud ce app logs an. Beispiel: Verwenden Sie den folgenden Befehl, um die Protokolle für die Anwendung anzuzeigen, die Sie im vorherigen Beispiel erstellt haben:
ibmcloud ce application logs --application myapp
Beispielausgabe
Getting logs for all instances of application 'myapp'...
OK
myapp-mw25y-1-deployment-8579d868f4-ssfnr/user-container:
Listening on port 8080
2021-04-13 17:22:08 - Received:
URL: /
Header: Accept-Encoding=[gzip]
Header: Ce-Id=[d2faa29c-8088-410f-bb30-416085c52a0b]
Header: Ce-Source=[/apis/v1/namespaces/81fvkfqi3n6/pingsources/mycronevent]
Header: Ce-Specversion=[1.0]
Header: Ce-Time=[2021-04-13T17:22:00.059682656Z]
Header: Ce-Type=[dev.knative.sources.ping]
Header: Content-Length=[0]
Header: Forwarded=[for=172.30.136.209;proto=http, for=172.30.48.203]
Header: K-Proxy-Request=[activator]
Header: Traceparent=[00-b13196fe439b6d7d67f3205b2f655788-e9fee441cd41158c-00]
Header: User-Agent=[Go-http-client/1.1]
Header: X-B3-Sampled=[0]
Header: X-B3-Spanid=[1dd2d76079811204]
Header: X-B3-Traceid=[710b7c383682d0cd1dd2d76079811204]
Header: X-Envoy-Attempt-Count=[1]
Header: X-Envoy-Decorator-Operation=[myapp-mw25y-1.81fvkfqi3n6.svc.cluster.local:80/*]
Header: X-Envoy-Internal=[true]
Header: X-Envoy-Peer-Metadata=[ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKGAoNSVNUSU9fVkVSU0lPThIHGgUxLjkuMQq+AwoGTEFCRUxTErMDKrADCh0KA2FwcBIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQoTCgVjaGFydBIKGghnYXRld2F5cwoUCghoZXJpdGFnZRIIGgZUaWxsZXIKNgopaW5zdGFsbC5vcGVyYXRvci5pc3Rpby5pby9vd25pbmctcmVzb3VyY2USCRoHdW5rbm93bgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQoZCgxpc3Rpby5pby9yZXYSCRoHZGVmYXVsdAowChtvcGVyYXRvci5pc3Rpby5pby9jb21wb25lbnQSERoPSW5ncmVzc0dhdGV3YXlzCiAKEXBvZC10ZW1wbGF0ZS1oYXNoEgsaCTU1YjU0N2Y0ZgoSCgdyZWxlYXNlEgcaBWlzdGlvCjkKH3NlcnZpY2UuaXN0aW8uaW8vY2Fub25pY2FsLW5hbWUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0CiIKF3NpZGVjYXIuaXN0aW8uaW8vaW5qZWN0EgcaBWZhbHNlChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAouCgROQU1FEiYaJGlzdGlvLWluZ3Jlc3NnYXRld2F5LTU1YjU0N2Y0Zi10aHN4cAobCglOQU1FU1BBQ0USDhoMaXN0aW8tc3lzdGVtCl0KBU9XTkVSElQaUmt1YmVybmV0ZXM6Ly9hcGlzL2FwcHMvdjEvbmFtZXNwYWNlcy9pc3Rpby1zeXN0ZW0vZGVwbG95bWVudHMvaXN0aW8taW5ncmVzc2dhdGV3YXkKFwoRUExBVEZPUk1fTUVUQURBVEESAioACicKDVdPUktMT0FEX05BTUUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXk=]
Header: X-Envoy-Peer-Metadata-Id=[router~172.30.48.203~istio-ingressgateway-55b547f4f-thsxp.istio-system~istio-system.svc.cluster.local]
Header: X-Forwarded-For=[172.30.136.209, 172.30.48.203, 172.30.167.171]
Header: X-Forwarded-Proto=[http]
Header: X-Request-Id=[fe8d6cec-f0e4-47c2-b9ae-81764cb377bc]
Weitere Informationen zur Protokollierung finden Sie im Thema Protokolle anzeigen.
Benötigen Sie weitere Codebeispiele? Schaut euch die Beispiele im Repository „ IBM Cloud Code Engine “ unter GitHub an.
Header- und Hauptteilinformationen von Cron für an Anwendungen übergebene Ereignisse
Alle Ereignisse, die an Anwendungen übergeben werden, werden als HTTP-POST-Nachrichten empfangen. Ereignisse enthalten bestimmte HTTP-Header, die Ihnen dabei helfen, schnell die wichtigsten Informationen zu den Ereignissen zu ermitteln, ohne
den Hauptteil (die Geschäftslogik) des Ereignisses durchsuchen zu müssen. Weitere Informationen finden Sie in der Spezifikation „ CloudEvents “.
Kopfzeilen
In der folgenden Tabelle werden die Kopfzeilen für periodische Timer-Ereignisse (Cron) beschrieben:
| Überschrift | Beschreibung |
|---|---|
ce-id |
Eine eindeutige Kennung für das Ereignis, sofern ein Ereignis nicht wiederholt wird; im Fall einer Wiederholung wird ihm dieselbe ID zugeordnet. |
ce-source |
Ein URI-Verweis, der den Ursprung des Ereignisses innerhalb des Ereignisproduzenten angibt. Bei Cron-Ereignissen handelt es sich bei diesem Header um eine URI-Referenz mit Unterdomäne für das Projekt und den Namen des Cron-Abonnements
im folgenden Format: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME]. |
ce-specversion |
Die Version der CloudEvents-Spezifikation. Dieser Wert ist immer 1.0. |
ce-time |
Der Zeitpunkt, an dem das Ereignis generiert wurde. |
ce-type |
Der Typ des Ereignisses. Bei Cron-Ereignissen ist dies dev.knative.sources.ping. |
Beispielausgabe
ce-id: c329ed76-5004-4383-a3cc-c7a9b82e3ac6
ce-source: /apis/v1/namespaces/6b0v3x9xek5/pingsources/mycronevent
ce-specversion: 1.0
ce-time: 2021-02-26T19:19:00.497637287Z
ce-type: dev.knative.sources.ping
HTTP-Hauptteil
Der HTTP-Hauptteil enthält das eigentliche Ereignis und besitzt das Format, das Sie beim Erstellen oder Aktualisieren des Abonnements angegeben haben.
Abonnieren von periodischen Timer-Ereignissen (cron) für eine Funktion
Sie können über die Konsole oder die Befehlszeilenschnittstelle (CLI) mit periodischen Timer-Abonnements arbeiten.
Ereignisse werden als POST-Anfragen vom Typ „ HTTP “ an Funktionen gesendet. Weitere Informationen zu den in einem Ereignis enthaltenen Informationen finden Sie in Informationen zu HTTP-Headern und -Hauptteilen für Ereignisse.
Abonnieren von periodischen Timer-Ereignissen (cron) für eine Funktion über die Konsole
Sie können über die Konsole Abonnements für periodische Timer-Ereignisse für eine Funktion erstellen und aktualisieren.
Vorbereitende Schritte
- Erstellen Sie ein Projekt.
- Erstellen Sie eine Funktion. Erstellen Sie beispielsweise eine Funktion mit dem Namen
myfun, die den folgenden Inline-Beispielcode verwendet:
/**
* The `main` function is the entry-point into the function.
* It has one optional argument 'params', which carries all the
* parameters the function was invoked with.
*/
async function main(params) {
// add process environment variables
params.env = process.env
// print recognizable string to the log
console.log('Function invocation via cron subscription');
// log params object, so invocation can be observed in the logs
console.dir(params);
// craft a simple HTTP RC 200 response,
// which also echos the params object
response = {
statusCode: 200,
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
body: params
};
return response
}
Führen Sie die folgenden Schritte aus, um über die Konsole ein Abonnement für ein periodisches Timer-Ereignis für eine Funktion zu erstellen und zu aktualisieren.
-
Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
-
Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements.
-
Klicken Sie auf der Seite 'Ereignisabonnements' auf Erstellen, um Ihr Abonnement zu erstellen.
-
Führen Sie auf der Seite „Ereignisabonnement erstellen“ die folgenden Schritte aus:
- Wählen Sie für Ereignistyp die Kachel für den periodischen Zeitgeber aus. Klicken Sie auf Weiter.
- Geben Sie unter Allgemein einen Namen für das Abonnement des periodischen Zeitgebers an, z. B.
myptimer. Sie können optional Ereignisattribute angeben. Beachten Sie, dass die Ereignisattribute als HTTP-Header verfügbar sind, wenn der Ereigniskonsument des periodischen Zeitgebers eine Anwendung ist. Wenn der Ereigniskonsument eine Funktion ist, sind Ereignisattribute als Schlüssel/Wert-Paare in der Eigenschaft__ce_headersdes Objektsparamsverfügbar. Fahren Sie durch Klicken auf Weiter fort. - Geben Sie bei Zeitplan Informationen zur Zeitsteuerung für die Ereignisse an. Der Erzeuger für periodische Timer-Ereignisse verwendet die Standard-Crontab-Syntax, um die Intervalldetails festzulegen. Wählen Sie Ihr Intervall
unter den bereitgestellten Mustern aus oder geben Sie Ihren eigenen angepassten Cron-Ausdruck an. Ein Beispiel wäre
0 0 * * *; dieser Ausdruck gibt an, dass das Ereignis täglich um Mitternacht auftreten soll. Wählen Sie für das vorliegende Beispiel das Zeitplanmuster für jeden Tag, jede Stunde, jede Minute aus. Der Cron-Ausdruck wird übrigens automatisch für Sie generiert. Die Muster für Tag, Stunde und Minute sowie der Cron-Ausdruck sind in UTC (Coordinated Universal Time) angegeben. Falls Sie keinen Zeitplan angeben, sendet dieses Ereignisabonnement einmal pro Minute ein Ereignis. Es wird eine Liste der anstehenden geplanten Ereignisse angezeigt. Beachten Sie, dass diese anstehenden geplanten Ereignisse in Ihrer Zeitzone angezeigt werden. Fahren Sie durch Klicken auf Weiter fort. - Geben Sie bei Angepasste Ereignisdaten Daten an, die in den Hauptteil Ihrer Ereignisnachricht einbezogen werden sollen. Sie können die Nachricht als Klartext oder im base64-Format angeben. Geben Sie für dieses Beispiel
den Text
hello strangerals Hauptteil der Ereignisnachricht an. Wenn die Nachricht das base64-Format besitzt, können Sie angeben, dass die Nachricht beim Senden des Ereignisses decodiert werden soll. Sie können auch den Inhaltstyp für Ihre angepassten Ereignisdaten angeben. Fahren Sie durch Klicken auf Weiter fort. - Wählen Sie für Ereigniskonsument den Komponententyp
Functionaus und geben Sie die Funktion zum Empfangen von Ereignissen an. Beachten Sie, dass Sie aus einer Liste vordefinierter Funktionen auswählen können. Verwenden Sie für dieses Beispiel die Funktionmyfun, die den integrierten Beispielcode verwendet. Wenn Sie Ihre Funktion noch nicht erstellt haben, können Sie den Namen Ihrer Funktion und Funktionsworkloads mit Inline-Code erstellen nach der Erstellung der periodischen Zeitgebersubskription angeben. Fahren Sie durch Klicken auf Weiter fort. - Überprüfen Sie unter Zusammenfassung die Einstellungen für das Ereignisabonnement des periodischen Zeitgebers und nehmen Sie bei Bedarf Änderungen vor. Wenn Sie bereit sind, klicken Sie auf „Erstellen“, um das Abonnement für den periodischen Timer anzulegen.
-
Nachdem Sie nun Ihr Abonnement für den periodischen Timer erstellt haben, rufen Sie die Seite „Ereignisabonnements“ auf, um eine Liste der definierten Abonnements anzuzeigen.
-
Um ein Abonnement zu aktualisieren, rufen Sie die Seite „Abonnement für den periodischen Timer“ auf. Klicken Sie auf der Seite 'Ereignisabonnements' auf den Namen des Abonnements, das aktualisiert werden soll.
-
Ändern Sie auf der Seite Ihres Abonnements für den periodischen Timer die Daten in der Ereignismeldung. Ändern Sie auf der Registerkarte Angepasste Ereignisdaten die Ereignisdaten in
{ "hello": "world" }und wählen Sieapplication/jsonals Inhaltstyp angepasster Ereignisdaten aus. Klicken Sie auf Speichern, um Ihre Änderungen zu speichern. -
Da die Funktion
myfunden integrierten Beispielcode verwendet, der das vollständige Objektparamsin Protokolldateien ausgibt, können Sie die Protokolle anzeigen, um zu überprüfen, ob die Funktion aufgerufen wurde. Zeigen Sie die Funktionsprotokolle für die Ereigniskonsumentenfunktionmyfunan und stellen Sie fest, dass das Objektparamsein Schlüssel/Wert-Paarhello: worldenthält. Sie können auch sehen, dass das Feldbodydes Objektsparamsden codierten Wert Base64 enthält{ "hello": "world" }Siehe Funktionsprotokolle über die Konsole anzeigen.
Abonnieren von periodischen Timer-Ereignissen (cron) für eine Funktion über die Befehlszeile
Vorbereitende Schritte
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt.
- Erstellen Sie eine Funktion. Erstellen Sie beispielsweise eine Funktion mit dem Namen
myfun, die den folgenden integrierten Beispielcode verwendet:
/**
* The `main` function is the entry-point into the function.
* It has one optional argument 'params', which carries all the
* parameters the function was invoked with.
*/
async function main(params) {
// add process environment variables
params.env = process.env
// print recognizable string to the log
console.log('Function invocation via cron subscription');
// log params object, so invocation can be observed in the logs
console.dir(params);
// craft a simple HTTP RC 200 response,
// which also echos the params object
response = {
statusCode: 200,
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
body: params
};
return response
}
Speichern Sie den Code in einer Datei namens sample_inline_code.js und erstellen Sie die Funktion mit dem folgenden Befehl:
ibmcloud ce function create --name myfun --runtime nodejs --inline-code ./sample_inline_code.js
Um Ihre Funktion über die CLI mit dem Abonnement für den periodischen Timer zu verknüpfen, verwenden Sie den ibmcloud ce sub cron create Befehl:
ibmcloud ce sub cron create --name NAME --destination-type function --destination FUNCTION_NAME --schedule CRON
Um beispielsweise ein Cron-Abonnement zu erstellen, das jeden Tag um Mitternacht ein Ereignis an eine App namens „ myfun “ sendet:
ibmcloud ce sub cron create --name mycronevent --destination-type function --destination myfun --schedule '0 0 * * *'
Sie müssen den Wert für den Zeitplan in Anführungszeichen einschließen, um sicherzustellen, dass er als gesamte Zeichenfolge behandelt wird.
In der folgenden Tabelle sind die Optionen zusammengefasst, die im vorherigen Beispiel beim Befehl sub cron create verwendet werden. Weitere Informationen zum Befehl und den zugehörigen Optionen finden Sie im
Abschnitt über den Befehl ibmcloud ce subscription cron create.
| Option | Beschreibung |
|---|---|
--name |
Der Name der Cron-Ereignisquelle. Dieser Wert ist erforderlich. |
--destination |
Der Name einer „ Code Engine “-Anwendung, -Funktion oder eines -Jobs im aktuellen Projekt, die bzw. der die Ereignisse vom Ereignisproduzenten empfangen soll. Dieser Wert ist erforderlich. |
--destination-type |
Der Typ des Ziels (destination), in diesem Fall function. Der Standardwert ist app. |
--schedule |
Die Planung für die Häufigkeit der Ereignisauslösungen im Crontab-Format. Geben Sie beispielsweise */2 * * * * (im Zeichenfolgeformat) an, damit alle 2 Minuten ein Ereignis gesendet wird. Standardmäßig wird das Cron-Ereignis
jede Minute ausgelöst und ist auf die Zeitzone UTC gesetzt. Wenn Sie die Zeitzone ändern möchten, verwenden Sie die Option --time-zone. Dieser Wert ist optional. |
- Tipps zur Verwendung der
sub cron-Befehle -
- Die Datenmenge für periodische Timer-Ereignisse ist auf maximal 4096 Byte begrenzt. Wenn Sie also die Option
--dataoder die Option--data-base64verwenden, können Sie maximal 4096 Byte senden. Weitere Informationen finden Sie im Thema Grenzwerte und Kontingente für Code Engine. - Cron-Abonnements verwenden standardmäßig die Zeitzone
UTC. Sie können die Zeitzone ändern, indem Sie die Option--time-zonebeim Befehlsub cron createodersub cron updateangeben. Gültige Zeitzonenwerte finden Sie in der TZ-Datenbank. Beim Erstellen eines Abonnements mitkubectlohne Angabe einer Zeitzone ist zu beachten, dass dieUTC-Zeitzone zugewiesen wird. - Wenn Sie Ihren App- oder Jobereigniskonsumenten noch nicht erstellt haben, verwenden Sie die Option
--forcebeim Befehlsub cron create, um die Erstellung des Cron-Ereignisabonnements zu erzwingen. Sie können den Namen Ihrer Funktion Funktion erstellen angeben, nachdem Sie die Cron-Subskription erstellen.
- Die Datenmenge für periodische Timer-Ereignisse ist auf maximal 4096 Byte begrenzt. Wenn Sie also die Option
Um zu überprüfen, ob Ihr Cron-Abonnement erfolgreich erstellt wurde, führen Sie den Befehl ibmcloud ce sub cron get --name mycronevent aus.
Beispielausgabe
Getting cron event subscription 'mycronevent'...
OK
Name: mycronevent
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 2m21s
Created: 2024-03-14T13:37:51-05:00
Destination Type: function
Destination: myfun
Schedule: 0 0 * * *
Time Zone: UTC
Ready: true
Events:
Type Reason Age Source Messages
Normal FinalizerUpdate 20s pingsource-controller Updated "mycronevent" finalizers
Normal PingSourceSynchronized 20s pingsource-controller PingSource adapter is synchronized
Aus dieser Ausgabe geht hervor, dass die Zielfunktion „ myfun “ lautet, der Zeitplan „ 0 0 * * * “ (täglich um Mitternacht) ist und der Status „Ready“ unter „ true “ zu finden ist.
Cron-Subskription über die CLI aktualisieren
Verwenden Sie zum Aktualisieren des Cron-Abonnements über die Befehlszeilenschnittstelle den Befehl ibmcloud ce subscription cron update.
Aktualisieren Sie beispielsweise das Abonnement „ mycronevent “, um den Zeitplan so zu ändern, dass alle 2 Minuten ein Ereignis an eine Funktion namens „ myfun “ gesendet wird:
ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'
Um zu überprüfen, ob Ihr Cron-Abonnement erfolgreich aktualisiert wurde, führen Sie den Befehl ibmcloud ce sub cron get --name mycronevent aus. Der Zeitplan für das Abonnement ist aktualisiert.
Beispielausgabe
Getting cron event subscription 'mycronevent'...
OK
Name: mycronevent
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 37m41s
Created: 2024-03-14T14:04:51-05:00
Destination Type: function
Destination: myfun
Schedule: */2 * * * *
Time Zone: UTC
Ready: true
Events:
Type Reason Age Source Messages
Normal FinalizerUpdate 20s pingsource-controller Updated "mycronevent" finalizers
Normal PingSourceSynchronized 20s pingsource-controller PingSource adapter is synchronized
Möchten Sie ein Lernprogramm ausprobieren? Weitere Informationen finden enthält der Abschnitt Ereignisse des periodischen Zeitgebers (Cron) abonnieren. Benötigen Sie weitere Codebeispiele? Schaut euch die Beispiele im Repository „ IBM Cloud Code Engine “ unter GitHub an.
Anzeigen von Ereignisinformationen zu einer Funktion über die Konsole
So rufen Sie Informationen zu Ihren Veranstaltungsabonnements ab:
- Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
- Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements, um eine Liste der definierten Abonnements anzuzeigen.
Wenn Ihre Funktion Informationen in Protokolldateien ausgibt, wie es der Beispieljob „ codeengine “ tut, sehen Sie sich die Protokolldateien Ihrer Funktion an. Weitere Informationen finden Sie unter Jobprotokolle über die Konsole anzeigen.
Cron-Header- und -Body-Informationen für Ereignisse, die an Funktionen übermittelt werden
Alle Ereignisse, die an Funktionen übermittelt werden, werden als POST-Nachrichten vom Typ „ HTTP “ empfangen. Ereignisse enthalten bestimmte „ HTTP “-Header, anhand derer Sie wichtige Informationen zu den Ereignissen schnell ermitteln können.
HTTP Die Header werden in der Eigenschaft „ __ce_headers “ des Objekts „ params “ gespeichert, mit dem die Funktion aufgerufen wird. Weitere Informationen finden Sie in der Spezifikation „ CloudEvents “.
Kopfzeilen
In der folgenden Tabelle sind die Schlüssel/Wert-Paare in __ce_headers für regelmäßige Zeitgeberereignisse (Cron) beschrieben:
| Überschrift | Beschreibung |
|---|---|
Ce-Id |
Eine eindeutige Kennung für das Ereignis, sofern ein Ereignis nicht wiederholt wird; im Fall einer Wiederholung wird ihm dieselbe ID zugeordnet. |
Ce-Source |
Ein URI-Verweis, der den Ursprung des Ereignisses innerhalb des Ereignisproduzenten angibt. Bei Cron-Ereignissen handelt es sich bei diesem Header um eine URI-Referenz mit Unterdomäne für das Projekt und den Namen des Cron-Abonnements
im folgenden Format: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME]. |
Ce-Specversion |
Die Version der CloudEvents-Spezifikation. Dieser Wert ist immer 1.0. |
Ce-Time |
Der Zeitpunkt, an dem das Ereignis generiert wurde. |
Ce-Type |
Der Typ des Ereignisses. Bei Cron-Ereignissen ist dies dev.knative.sources.ping. |
Beispielausgabe
__ce_headers: {
"Ce-Id": "b861440f-0e17-44ab-9bab-826da0c9713f",
"Ce-Source": "/apis/v1/namespaces/7iuw2furi55/pingsources/mycronevent",
"Ce-Specversion": "1.0",
"Ce-Time": "2024-06-02T10:56:00.062572905Z",
"Ce-Type": "dev.knative.sources.ping"
}
HTTP-Hauptteil
Der „ HTTP “-Body enthält die benutzerdefinierten Ereignisdaten und hat das Format, das Sie beim Erstellen oder Aktualisieren des Abonnements festlegen. Sie können über die Eigenschaft body im Objekt params auf
die angepassten Ereignisdaten zugreifen.
Beispiel für ein params-Objekt für einen Ereignisaufruf mit einer benutzerdefinierten Ereignisdatei für hello stranger und einer Inhaltstyp der benutzerdefinierten Ereignisdaten für text/plain:
{
"__ce_headers": {
"Ce-Id": "b861440f-0e17-44ab-9bab-826da0c9713f",
"Ce-Source": "/apis/v1/namespaces/7iuw2furi55/pingsources/mycronevent",
"Ce-Specversion": "1.0",
"Ce-Time": "2024-06-02T10:56:00.062572905Z",
"Ce-Type": "dev.knative.sources.ping",
"Content-Length": "14",
"Content-Type": "text/plain"
},
"body": "hello stranger"
}
Der Wert für „ body “ wird als „ Base64 “ kodiert, wenn der Inhaltstyp der benutzerdefinierten Ereignisdaten auf „ application/json “ gesetzt ist.
Ereignisse des periodischen Zeitgebers (cron) für einen Job abonnieren
Sie können über die Konsole oder die Befehlszeilenschnittstelle (CLI) mit periodischen Timer-Abonnements arbeiten.
Ihr Job empfängt Ereignisse als Umgebungsvariablen. Weitere Informationen zu den Umgebungsvariablen, die von Cron gesendet werden, finden Sie unter Umgebungsvariablen für Ereignisse.
Ereignisse des periodischen Zeitgebers (Cron) für einen Job über die Konsole abonnieren
Sie können über die Konsole Abonnements für periodische Timer-Ereignisse für einen Job erstellen und aktualisieren.
Vorbereitende Schritte
- Erstellen Sie ein Projekt.
- Erstellen Sie einen Job. Erstellen Sie beispielsweise einen Job mit dem Namen
myjob, der dascodeengine-Image verwendet. Dieses Bild wurde auf der Grundlage von „codeengine.go“ erstellt, das im Repository „Samples for IBM Cloud Code Engine “(GitHub ) verfügbar ist.
Führen Sie die folgenden Schritte aus, um über die Konsole ein Abonnement für ein periodisches Timer-Ereignis für einen Job zu erstellen und zu aktualisieren.
-
Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
-
Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements.
-
Klicken Sie auf der Seite 'Ereignisabonnements' auf Erstellen, um Ihr Abonnement zu erstellen.
-
Führen Sie auf der Seite „Ereignisabonnement erstellen“ die folgenden Schritte aus:
- Geben Sie unter Allgemein einen Namen für das Abonnement des periodischen Zeitgebers an, z. B.
myptimer2. Sie können optional Ereignisattribute angeben. Beachten Sie, dass die Ereignisattribute als HTTP-Header verfügbar sind, wenn der Ereigniskonsument des periodischen Zeitgebers eine Anwendung ist. Handelt es sich bei dem Ereigniskonsumenten um einen Job, stehen Ereignisattribute als Umgebungsvariablen zur Verfügung. Fahren Sie durch Klicken auf Weiter fort. - Geben Sie bei Zeitplan Informationen zur Zeitsteuerung für die Ereignisse an. Der Erzeuger für periodische Timer-Ereignisse verwendet die Standard-Crontab-Syntax, um die Intervalldetails festzulegen. Wählen Sie Ihr Intervall
unter den bereitgestellten Mustern aus oder geben Sie Ihren eigenen angepassten Cron-Ausdruck an. Ein Beispiel wäre
0 0 * * *; dieser Ausdruck gibt an, dass das Ereignis täglich um Mitternacht auftreten soll. Wählen Sie für das vorliegende Beispiel das Zeitplanmuster für jeden Tag, jede Stunde, jede Minute aus. Der Cron-Ausdruck wird übrigens automatisch für Sie generiert. Die Muster für Tag, Stunde und Minute sowie der Cron-Ausdruck sind in UTC (Coordinated Universal Time) angegeben. Falls Sie keinen Zeitplan angeben, sendet dieses Ereignisabonnement einmal pro Minute ein Ereignis. Es wird eine Liste der anstehenden geplanten Ereignisse angezeigt. Beachten Sie, dass diese anstehenden geplanten Ereignisse in Ihrer Zeitzone angezeigt werden. Fahren Sie durch Klicken auf Weiter fort. - Geben Sie bei Angepasste Ereignisdaten Daten an, die in den Hauptteil Ihrer Ereignisnachricht einbezogen werden sollen. Sie können die Nachricht als Klartext oder im base64-Format angeben. Geben Sie für dieses Beispiel
den Text
hello strangerals Hauptteil der Ereignisnachricht an. Wenn die Nachricht das base64-Format besitzt, können Sie angeben, dass die Nachricht beim Senden des Ereignisses decodiert werden soll. Sie können auch den Inhaltstyp für Ihre angepassten Ereignisdaten angeben. Fahren Sie durch Klicken auf Weiter fort. - Geben Sie bei Ereigniskonsument die Anwendung oder den Job für den Empfang von Ereignissen an. Beachten Sie, dass Sie eine Auswahl in einer Liste definierter Anwendungen und Jobs treffen können. Verwenden Sie für dieses
Beispiel den Job
myjob, der dasicr.io/codeengine/codeengine-Image referenziert. Falls Sie Ihren Job noch nicht erstellt haben, können Sie den Namen Ihres Jobs und „ Erstellen Sie Ihren Job “ angeben, nachdem Sie das Abonnement für den periodischen Timer erstellt haben. Fahren Sie durch Klicken auf Weiter fort. - Überprüfen Sie unter Zusammenfassung die Einstellungen für das Ereignisabonnement des periodischen Zeitgebers und nehmen Sie bei Bedarf Änderungen vor. Wenn Sie bereit sind, klicken Sie auf „Erstellen“, um das Abonnement für den periodischen Timer anzulegen.
- Geben Sie unter Allgemein einen Namen für das Abonnement des periodischen Zeitgebers an, z. B.
-
Nachdem Sie nun Ihr Abonnement für den periodischen Timer erstellt haben, rufen Sie die Seite „Ereignisabonnements“ auf, um eine Liste der definierten Abonnements anzuzeigen.
-
Um ein Abonnement zu aktualisieren, rufen Sie die Seite „Abonnement für den periodischen Timer“ auf. Klicken Sie auf der Seite 'Ereignisabonnements' auf den Namen des Abonnements, das aktualisiert werden soll.
-
Ändern Sie auf der Seite Ihres Abonnements für den periodischen Timer die Daten in der Ereignismeldung. Ändern Sie auf der Registerkarte Angepasste Ereignisdaten die Ereignisdaten in
hello sunshine. Klicken Sie auf Speichern, um Ihre Änderungen zu speichern. -
Da der Job
myjobdie Beispielanwendungcodeenginereferenziert, die Informationen in Protokolldateien ausgibt, können Sie die Protokolle anzeigen. Zeigen Sie die Jobprotokolle für den Ereigniskonsumentenjobmyjoban; Sie können feststellen, dass die Ereignisnachrichthello sunshinelautet. Weitere Informationen finden Sie unter Jobprotokolle über die Konsole anzeigen.
Ereignisse des periodischen Zeitgebers (Cron) für einen Job über die Befehlszeilenschnittstelle abonnieren
Vorbereitende Schritte
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt.
- Erstellen Sie einen Job. Erstellen Sie beispielsweise einen Job mit dem Namen
myjob, der dasicr.io/codeengine/codeengine-Image verwendet. Dieses Bild wurde auf der Grundlage von „codeengine.go“ erstellt, das im Repository „Samples for IBM Cloud Code Engine “(GitHub ) verfügbar ist.
ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine
So verbinden Sie Ihren Job über die Befehlszeilenschnittstelle (CLI) mithilfe des ibmcloud ce sub cron create Befehl.
ibmcloud ce sub cron create --name NAME --destination-type job --destination JOB_NAME --schedule CRON
Geben Sie beispielsweise Folgendes ein, ein Cron-Abonnement zu erstellen, das alle 5 Minuten ein Ereignis an einen Job namens myjob sendet:
ibmcloud ce sub cron create --name mycronevent --destination-type job --destination myjob --schedule '*/5 * * * *' --data '{ "message": "Hello world!" }' --content-type application/json
Sie müssen den Wert für den Zeitplan in Anführungszeichen einschließen, um sicherzustellen, dass er als gesamte Zeichenfolge behandelt wird.
In der folgenden Tabelle sind die Optionen zusammengefasst, die beim Befehl sub cron create in diesem Beispiel verwendet werden. Weitere Informationen zum Befehl und den zugehörigen Optionen finden Sie im Abschnitt
über den Befehl ibmcloud ce subscription cron create.
| Option | Beschreibung |
|---|---|
--name |
Der Name der Cron-Ereignisquelle. |
--destination-type |
Der Typ des Ziels (destination), in diesem Fall job. |
--destination |
Der Name eines Code Engine-Jobs im aktuellen Projekt, der die Ereignisse des Ereignisproduzenten empfangen soll. |
--schedule |
Die Planung für die Häufigkeit der Ereignisauslösungen im Crontab-Format. Geben Sie beispielsweise */2 * * * * (im Zeichenfolgeformat) an, damit alle 2 Minuten ein Ereignis gesendet wird. Standardmäßig wird das Cron-Ereignis
jede Minute ausgelöst und ist auf die Zeitzone UTC gesetzt. Wenn Sie die Zeitzone ändern möchten, verwenden Sie die Option --time-zone. Dieser Wert ist optional. |
- Tipps zur Verwendung der
sub cron-Befehle -
- Die Datenmenge für periodische Timer-Ereignisse ist auf maximal 4096 Byte begrenzt. Wenn Sie also die Option
--dataoder die Option--data-base64verwenden, können Sie maximal 4096 Byte senden. Weitere Informationen finden Sie im Thema Grenzwerte und Kontingente für Code Engine. - Cron-Abonnements verwenden standardmäßig die Zeitzone
UTC. Sie können die Zeitzone ändern, indem Sie die Option--time-zonebeim Befehlsub cron createodersub cron updateangeben. Gültige Zeitzonenwerte finden Sie in der TZ-Datenbank. Beim Erstellen eines Abonnements mitkubectlohne Angabe einer Zeitzone ist zu beachten, dass dieUTC-Zeitzone zugewiesen wird. - Wenn Sie Ihren App- oder Jobereigniskonsumenten noch nicht erstellt haben, verwenden Sie die Option
--forcebeim Befehlsub cron create, um die Erstellung des Cron-Ereignisabonnements zu erzwingen. Sie können nach der Erstellung des Cron-Abonnements den Namen Ihrer Anwendung oder Ihres Jobs angeben und Ihre Anwendung erstellen oder Ihren Job erstellen .
- Die Datenmenge für periodische Timer-Ereignisse ist auf maximal 4096 Byte begrenzt. Wenn Sie also die Option
Um zu überprüfen, ob Ihr Cron-Abonnement erfolgreich erstellt wurde, führen Sie den Befehl ibmcloud ce sub cron get --name mycronevent aus.
Beispielausgabe
Getting cron source 'mycronevent'...
OK
Name: mycronevent
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 54s
Created: 2021-04-13T11:38:50-05:00
Destination Type: job
Destination: myjob
Schedule: */5 * * * *
Time Zone: UTC
Content Type: application/json
Data: { "message": "Hello world!" }
Ready: true
Events:
Type Reason Age Source Messages
Normal FinalizerUpdate 12s pingsource-controller Updated "mycronevent" finalizers
Aus dieser Ausgabe geht hervor, dass der Zieljob myjob ist, der Zeitplan */5 * * * * (alle fünf Minuten) ist und der Bereitstatus (Ready) true lautet.
Jobausführungen, die durch Subskriptionen erstellt werden, werden nach 10 Minuten gelöscht.
Cron-Subskription über die CLI (Job) aktualisieren
Verwenden Sie zum Aktualisieren des Cron-Abonnements über die Befehlszeilenschnittstelle den Befehl ibmcloud ce subscription cron update.
Aktualisieren Sie zum Beispiel das Abonnement mycronevent, um den Zeitplan so zu ändern, dass alle 2 Minuten ein Ereignis an eine App namens myapp gesendet wird.
ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'
Um zu überprüfen, ob Ihr Cron-Abonnement erfolgreich aktualisiert wurde, führen Sie den Befehl ibmcloud ce sub cron get --name mycronevent aus. Der Zeitplan für das Abonnement ist aktualisiert.
Beispielausgabe
Getting cron source 'mycronevent'...
OK
Name: mycronevent
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 2m21s
Created: 2021-08-31T16:00:49-04:00
Destination Type: job
Destination: myjob
Schedule: */2 * * * *
Time Zone: UTC
Content Type: application/json
Data: { "message": "Hello world!" }
Ready: true
Events:
Type Reason Age Source Messages
Normal PingSourceSynchronized 7s (x3 over 13m) pingsource-controller PingSource adapter is synchronized
Ereignisinformationen für einen Job über die Konsole anzeigen
Gehen Sie folgendermaßen vor, um Informationen zu Ihren Ereignisabonnements anzuzeigen.
- Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
- Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements, um eine Liste der definierten Abonnements anzuzeigen.
Wenn Ihr Job Informationen in Protokolldateien ausgibt (wie der Beispieljob codeengine), zeigen Sie die Protokolldateien für Ihren Ereigniskonsumentenjob an. Weitere Informationen finden Sie unter Jobprotokolle über die Konsole anzeigen.
Ereignisinformationen für einen Job über die Befehlszeilenschnittstelle anzeigen
Wenn Ihr Job Informationen in Protokolldateien ausgibt (wie der Beispieljob codeengine), können Sie nach der Jobausführung suchen, die ausgehend vom Ereignis des periodischen Zeitgebers (Cron) erstellt wurde, und dann die Jobausführungsprotokolle
anzeigen. Beispiel: Um die Jobausführung für den Job im vorherigen Beispiel zu ermitteln, können Sie den folgenden Befehl verwenden:
ibmcloud ce jobrun list
Beispielausgabe
Listing job runs...
OK
Name Failed Pending Requested Running Succeeded Unknown Age
myjob-kd829 0 0 0 0 1 0 43s
Zeigen Sie die Protokolle für die Jobausführung an, indem Sie den Namen der Jobausführung angeben.
ibmcloud ce jobrun logs --jobrun myjob-kd829
Beispielausgabe
Hello from helloworld! I'm a batch job! Index: 0
Hello World from:
. ___ __ ____ ____
./ __)/ \( \( __)
( (__( O )) D ( ) _)
.\___)\__/(____/(____)
.____ __ _ ___ __ __ _ ____
( __)( ( \ / __)( )( ( \( __)
.) _) / /( (_ \ )( / / ) _)
(____)\_)__) \___/(__)\_)__)(____)
Some Env Vars:
--------------
CE_DATA={ "message": "Hello world!" }
CE_ID=abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
CE_SOURCE=/apis/v1/namespaces/1234abcd1a2/pingsources/mycroneventjob
CE_SPECVERSION=1.0
CE_TIME=2021-04-13T17:41:00.429658447Z
CE_TYPE=dev.knative.sources.ping
CONTENT_TYPE=application/json
HOME=/root
HOSTNAME=myjob-mpps4-0-0
JOB_INDEX=0
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
Bitte beachten Sie, dass die Protokollinformationen zu den Auftragsausführungen nur eine Stunde lang gespeichert bleiben. Weitere Informationen zur Protokollierung finden Sie im Thema Protokolle anzeigen.
Weitere Informationen zu den Umgebungsvariablen, die von Cron gesendet werden, finden Sie unter Umgebungsvariablen für Ereignisse.
Benötigen Sie weitere Codebeispiele? Schaut euch die Beispiele im Repository „ IBM Cloud Code Engine “ unter GitHub an.
Umgebungsvariablen für an Jobs übergebene Ereignisse
Alle Ereignisse, die an Jobs übergeben werden, werden als Umgebungsvariablen empfangen. Diese Umgebungsvariablen enthalten das Präfix „ CE_ “ und basieren auf der Spezifikation „ CloudEvents “.
Jedes Ereignis enthält einige allgemeine Umgebungsvariablen, die jedes Mal angezeigt werden, wenn das Ereignis an einen Job übergeben wird. In den tatsächlichen Variablen in den einzelnen Ereignissen können weitere Optionen enthalten sein.
Weitere Informationen finden Sie unter den Attributen von „ CloudEvent “.
In der folgenden Tabelle sind die speziellen Umgebungsvariablen für Cron-Ereignisse beschrieben.
| Variable | Beschreibung |
|---|---|
CE_DATA |
Die Daten (der Hauptteil) für das Ereignis. Weitere Informationen finden Sie unter CE_DATA für Cron-Ereignisse. |
CE_ID |
Eine eindeutige Kennung für das Ereignis, sofern ein Ereignis nicht wiederholt wird; im Fall einer Wiederholung wird ihm dieselbe ID zugeordnet. |
CE_SOURCE |
Ein URI-Verweis, der den Ursprung des Ereignisses innerhalb des Ereignisproduzenten angibt. Bei Cron-Ereignissen handelt es sich bei diesem Header um eine URI-Referenz mit Unterdomäne für das Projekt und den Namen des Cron-Abonnements
im folgenden Format: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME]. |
CE_SPECVERSION |
Die Version der CloudEvents-Spezifikation. Dieser Wert ist immer 1.0. |
CE_TIME |
Der Zeitpunkt, an dem das Ereignis generiert wurde. |
CE_TYPE |
Der Typ des Ereignisses. Bei Cron-Ereignissen ist dies dev.knative.sources.ping. |
CE_DATA-Umgebungsvariable
Bei periodischen Timer-Ereignissen enthält die Umgebungsvariable „ CE_DATA “ das Ereignis selbst und hat das Format, das Sie beim Erstellen oder Aktualisieren des Abonnements festlegen.
Beispielausgabe
CE_DATA={ "message": "Hello world!" }
CE_ID=abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
CE_SOURCE=/apis/v1/namespaces/1234abcd1a2/pingsources/mycroneventjob
CE_SPECVERSION=1.0
CE_TIME=2021-04-13T17:41:00.429658447Z
CE_TYPE=dev.knative.sources.ping
Zusätzliche Ereignisattribute definieren
Beim Erstellen eines Abonnements können Sie zusätzliche Ereignisattribute definieren, die in alle generierten Ereignisse eingeschlossen werden sollen. Diese Ereignisattribute werden ähnlich wie jedes andere CloudEvent-Attribute
in der Ereignisübergabe angegeben. Wenn Sie den Namen eines vorhandenen CloudEvent-Attributs angeben, wird der ursprüngliche Wert, der im Ereignis enthalten war, überschrieben. Weitere Informationen finden Sie unter Kann ich andere CloudEvents-Spezifikationen verwenden?
In der Konsole können Sie Ereignisattribute als Schlüssel/Wert-Paare auf der Registerkarte Allgemein für Ihr Abonnement von Ereignissen des periodischen Zeitgebers (Cron) angeben.
In der Befehlszeilenschnittstelle verwenden Sie zum Definieren von zusätzlichen Attributen die Optionen --extension beim Befehl ibmcloud ce sub cron create.
Subskription löschen
Wenn Sie ein Abonnement des periodischen Zeitgebers (Cron) nicht mehr benötigen, können Sie es löschen.
Abonnement über die Konsole löschen
- Rufen Sie auf der Seite „ Code Engine-Projekte“ Ihr Projekt auf.
- Klicken Sie auf der Seite 'Übersicht' auf Ereignisabonnements, um eine Liste der definierten Abonnements anzuzeigen.
- Löschen Sie in der Liste der Abonnements dasjenige Abonnement, das Sie aus Ihrer Anwendung oder Ihrem Job entfernen möchten.
Beim Löschen einer Anwendung oder eines Jobs wird das entsprechende Abonnement nicht gelöscht.
Abonnement über die Befehlszeilenschnittstelle löschen
Sie können ein Abonnement mit dem Befehl ibmcloud ce sub cron delete oder dem Befehl ibmcloud ce sub cos delete löschen.
Mit dem folgenden Befehl löschen Sie beispielsweise ein Cron-Abonnement namens mycronevent2.
ibmcloud ce subscription cron delete --name mycronevent2
Beim Löschen einer Anwendung oder eines Jobs wird das entsprechende Abonnement nicht gelöscht. Das Abonnement wird in der Befehlszeilenschnittstelle stattdessen auf den Wert false für den Bereitstatus (Ready) gesetzt, da es von
der Verfügbarkeit der Anwendung oder des Jobs abhängig ist. Wenn Sie die Anwendung bzw. den Job (oder eine andere Anwendung bzw. einen anderen Job mit demselben Namen) erneut erstellen, wird die Verbindung für das Abonnement wiederhergestellt
und der Bereitstatus lautet dann erneut true.