Umgang und Probleme mit Shell Skripten #6461
Replies: 2 comments 2 replies
-
Eine weitere Möglichkeit, die Darstellung der Ergebnisse zu verbessern: |
Beta Was this translation helpful? Give feedback.
-
Nachdem ich ein wenig über das Thema nachgedacht habe, hätte ich ein paar Bemerkungen und gründsätzliche Fragen.
Daher stellt sich mir die Frage, ob Kitodo nicht beides unterstützen müsste: a) Eine asynchrone Ausführung von Kommandozeilenskripten über den Task-Manager, um eine asynchrone Abwicklung von Skript-Schritten direkt in Kitodo zu ermöglichen und b) Eine Funktion zur Anlage von Jobs für asynchrone Aufgaben in Active MQ, die dann von einem externen Mechanismus abgearbeitet und über die bekannten Mechanismen in Kitodo abgeschlossen werden. Die aktuelle Umsetzung wirklicher asynchroner Skripte über einen Workaround (Rückgabe-Wert 1 um die Aufgabe offen zu halten), sollte man daher im Idealfall um die Möglichkeit ergänzen in Kitodo (zumindest als Option) Jobs direkt in ActiveMQ abzulegen, und ActiveMQ damit noch besser in die Infrastruktur zu integrieren. Daneben sollte man kritisch evaluieren, inwiefern eine asynchrone Prozessierung von sehr vielen oder sehr lange laufenden Kommando-Zeilen-Prozessen im Rahmen der Kitodo-TaskManager-Steuerung überhaupt möglich ist. Oder ob man dann für die Abarbeitung sehr vieler bzw. lang laufender serieller Tasks nicht die Einbindung von Job Queues erleichtern sollte. Das wäre dann ein Mechanismus Workflow-Orchestrierung (die in Kitodo verbleibt) und Prozess-Ausführung bei Bedarf teilweise zu separieren, ohne direkt die Workflow-Engine neu konzipieren zu müssen (siehe #4137 (comment) ) |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Der aktuelle Ist-Stand ist wie folgt:
Im Workflow der Anwendung kann pro Workflow-Aufgabe ein Skript definiert werden, welches entweder durch manuelle Betätigung oder automatisch ausgeführt wird. Dabei gibt der Exit Status / Beendigungsstatus des aufgerufenen Skriptes an, ob diese Ausführung erfolgreich (Exit Status mit dem Wert 0) war oder nicht (Exit Status mit dem Wert 1).
Ggf. werden noch die Ausgaben des Skript Ausführung dem Benutzer angezeigt (im Fall der manuellen Ausführung) oder werden unterdrückt (im Fall der automatischen Ausführung). Wurde das Skript manuell gestartet / ausgeführt, dann wird bei der erfolgreichen Ausführungen die Standard-Ausgabe (stdout / Konsolen-Kanal 1) dem Benutzer präsentiert, bei einer erfolglosen Ausführung hingegen die Fehlerkonsole (stderr / Konsolen-Kanal 2).
Bei der manuellen Ausführung eines Skriptes muss der auszuführende Benutzer so lange warten bis sich das Skript beendet.
Wird ein Skript automatisch ausgeführt und ist der Beendigungsstatus erfolgreich, dann wird die damit verbundene Aufgabe automatisch geschlossen. Ist hingegen der Beendigungsstatus nicht erfolgreich, wird die Aufgabe vom Status "in Bearbeitung" auf "offen" gesetzt und die Aufgabe muss auf anderen Weg abgeschlossen werden.
Es dadurch viel Verbesserungspotential. Siehe auch #6449 und #6460 aber noch mögliche weitere:
Da der Beendigungsstatus auf 2 Werte festgelegt ist, gibt es hier das Problem, dass automatische Aufgaben, die ein Skript starten aber durch bspw. ActiveMQ später geschlossen werden, weiterhin in dem Bearbeitungsstatus "offen" bleiben, obwohl die Bearbeitung asynchron weiter läuft. D.h. das aufrufende Skript startet die extern lang laufende Bearbeitung und beendet sich aktuell mit dem Beendigungsstatus 1, damit die Aufgabe selbst nicht abgeschlossen wird da ansonsten spätere Aufgaben Workflow auf "offen" gesetzt werden. Daher wäre es für dieses Szenario sehr gut, wenn es mindestens einen weiteren definierten Status gäbe, der anzeigt, dass eine Skript-Ausführung erfolgreich sich beendet hat, aber die Aufgabe aus der das Skript aufgerufen wurde, offen bzw. in Bearbeitung bleibt und durch einen anderen Mechanismus (bspw. ActiveMQ) abgeschlossen wird.
Man kann aktuell im Workflow-Editor noch im Workflow selbst (für bestehende Aufgaben) nicht definieren, dass eine Skript-Ausführung asynchron erfolgen soll. D.h. bei jeder aktuellen Ausführung eines Skriptes muss entweder der Benutzer oder die Anwendung so lange warten bis das Skript zu einem Ende gekommen ist. Bei einer asynchronen Ausführung würde die Ausführung selbst bspw. über den internen Taskmanager durchgeführt werden. Nach Beendigung der Ausführung wird entweder der Benutzer, der das Skript manuell gestartet hat oder Person X bei automatischen Aufgaben über die Ausführung informiert. Dies ist bspw. in Add notification menu #6460 schon mit angedacht. Wobei mir die Speicherung / Vorhaltung der Nachrichten nicht ganz klar ist.
Bei der Ausgabe einer Skript-Ausführung (unter Linux/Unix) stehen einen mindestens 2 Ausgabe-Kanäle zur Verfügung: stdout und stderr. Der erstere ist eher für die allgemeinen Ausgaben bestimmt und der letztere eher für Fehlermeldungen. Theoretisch stehen dem Skript / Programm beliebig viele Ausgabekanäle zur Verfügung, aber die Unterstützung weiterer kann später erfolgen. In der aktuellen Implementierung (Stand 11.03.2025) werden diese jedoch in der Reihenfolge so vermischt, dass zuerst alle Ausgaben von stdout kommen und danach die Meldungen von stderr. Bei einer Ausführung eines Skriptes ist aber nicht sichergestellt, dass nur am Ende die Fehlermeldungen von stderr kommen. Je nach Skript können die Fehlermeldungen auch schon eher ausgegeben werden. Es wäre besser, die Meldungen in der Reihenfolge des Erstellung dem Benutzer zu präsentieren. Gerade im Fehlerfall ist dies sehr wichtig. Fix script output #6450 adressiert das gemeldete Problem von Display output of non automatic script tasks to the assigned user #6449, jedoch ist die Reihenfolge der Meldungen ein separat zu lösendes Problem.
Gibt es noch weitere Verbesserungsideen oder Nutzungsprobleme im Kontext der Skript-Ausführung, die jetzt hier nicht adressiert sind? Wenn ja gerne ergänzen.
In einer jeweils separaten Diskussion sollte dann über die einzelnen Probleme Lösungen diskutiert werden bevor diese ggf. auch im Rahmen eines zukünftigen Entwicklungsfond oder durch Beauftragung oder selbständige Arbeiten gelöst werden.
Ich erwähne einmal @oliver-stoehr , @solth , @BartChris und @lutzhelm da die Personen in diesbezüglichen Diskussionen / Vorschlägen aktuell mit der Thematik vertraut sind aber auch jeder andere ist gern zum Beitragen hier eingeladen.
Beta Was this translation helpful? Give feedback.
All reactions