Läufe und Probleme
Ein Skript, das handelt, während niemand zusieht, ist ohne Protokoll nicht zu verantworten. Das Dock unten an der Skriptseite ist der Ort, den man um 08:00 Uhr aufmacht, um zu sehen, was um 03:00 Uhr passiert ist.
Das Ausführungsprotokoll
Abschnitt betitelt „Das Ausführungsprotokoll“Jede Zeile ist ein Lauf: wann er begann, wie lange er dauerte, ob er erfolgreich war und warum er lief. Aufgeklappt zeigt er, was geschrieben wurde, was das Skript ausgegeben hat und — falls er scheiterte — die Meldung mit der Zeile im Code.
Das Protokoll zeigt Tatsachen. Jeder Schreibvorgang steht mit seinem Ausgang da: hat die Maschine erreicht, hier festgehalten oder gescheitert. Was nur geschrieben würde, gibt es im Probelauf und nirgends sonst.
Die Ursachen, und zwei davon sind keine Läufe des Skripts:
| Ursache | Bedeutet |
|---|---|
| Tag geändert | ein gebundenes Tag wurde geschrieben |
| Takt | der zyklische Auslöser |
| Zeitplan | ein fälliger Zeitpunkt |
| verpasst — die Instanz lief nicht | der Zeitpunkt war fällig, es war niemand da. Nicht nachgeholt |
| Watchdog: kein Lauf angekommen | die Uhr hat gemerkt, dass ein zyklisches Skript stehengeblieben ist |
| Systemereignis | Start, Herunterfahren, Verbindung |
| von Hand | jemand hat gestartet |
Das Protokoll ist begrenzt. Die letzten 200 Läufe je Skript bleiben, ältere werden entfernt. Auf der Seite steht die Zahl. Ein Skript, das jede Sekunde läuft, erzeugt 86.400 Zeilen am Tag — unbegrenzt wäre die größte Tabelle der Instanz ein Hilfsmittel zur Fehlersuche. Einzelne Läufe stehen deshalb auch nicht im Audit-Protokoll; dort steht, wer das Skript geändert hat.
Live mitlesen. Neben den Reitern steht Live in der Diagnose, sobald die Diagnoseleiste in
diesem Browser eingeschaltet ist (siehe Betrieb, Protokolle und Diagnose). Der Link öffnet sie
gefiltert auf dieses Skript und zeigt, was ein von Ihnen gestarteter Lauf mit print() ausgibt.
Ist die Leiste ausgeschaltet, gibt es den Link nicht.
Wenn Auslöser schneller kommen als das Skript
Abschnitt betitelt „Wenn Auslöser schneller kommen als das Skript“Auslöser kommen in der Geschwindigkeit einer Maschine, ein Skript läuft in der Geschwindigkeit eines Python-Prozesses. Dazwischen steht eine Warteschlange je Skript, und sie ist begrenzt. Ist sie voll, fällt der älteste Eintrag heraus — der Wert, der am wenigsten wahrscheinlich noch zählt.
Das Verlorene wird gezählt und angezeigt, am Blatt im Baum und in der Liste:
- wartend — was gerade ansteht.
- Auslöser verworfen — das Skript ist langsamer als seine Quelle. Diese Zahl ist der Hinweis, dass etwas nicht passt, nicht ein Schönheitsfehler.
- von der Grenze abgewiesen — die Ratenbegrenzung hat gegriffen.
Je Skript läuft immer nur ein Lauf zur Zeit; verschiedene Skripte laufen nebeneinander.
Ratenbegrenzung (Rate limit)
Abschnitt betitelt „Ratenbegrenzung (Rate limit)“Unter Grenzen steht, wie viele Läufe je Minute höchstens stattfinden. Voreingestellt sind 120. Das ist die Grenze für den Fall, der keine Rückkopplung ist: ein Skript, das von einer schnellen Maschine tausendmal je Sekunde ausgelöst wird.
Gegen die Rückkopplung selbst — ein Skript schreibt ein Tag, dieses Schreiben löst ein Skript aus — hilft etwas anderes: Mit jedem Schreibvorgang wandert die Kette seiner Verursacher mit. Taucht ein Skript darin zweimal auf, wird der Lauf abgelehnt und benannt.
Der Reiter Probleme
Abschnitt betitelt „Der Reiter Probleme“Hier steht, was am Code auffällt, ohne dass er gelaufen wäre:
- Syntaxfehler, mit der Zeile.
- Hier nicht gefunden: … — ein Import, der weder auf ein Skript hier zeigt noch auf ein Modul, von dem wir sicher wissen, dass Python es mitbringt. Das kann völlig richtig sein: eine Anlage kann Python-Pakete haben, die TrakState nicht kennt. Deshalb steht dort „hier nicht gefunden” und nicht „gibt es nicht”.
Steht da Keine Probleme, lösen sich die Importe auf und der Code lässt sich lesen. Ob er das Richtige tut, sagt nur der Probelauf.
Wenn gar nichts von allein läuft
Abschnitt betitelt „Wenn gar nichts von allein läuft“Hat diese Instanz keinen Auslöser-Kreislauf, sagt die Seite das oben: Es läuft nichts von allein, Skripte lassen sich bearbeiten und von Hand starten. Der Schalter Eingeschaltet verspricht dann nichts, was nicht eingelöst wird.