- QSH oder Qshell ist der in die PASE-Umgebung integrierte IBM i POSIX-Befehlsinterpreter.
- Es ermöglicht die Kombination von Unix-ähnlichen Befehlen mit CL, um Aufgaben auf dem IFS zu automatisieren.
- Es unterstützt Skripte mit Parametern ($0, $1, set, shift), die eine erweiterte Automatisierung ermöglichen.
- Es bezieht sich auf Java- und WebSphere-Umgebungen, in denen die Heap-Konfiguration von entscheidender Bedeutung ist.

Wer mit IBM i (dem alten AS/400) arbeitet, wird früher oder später darauf stoßen. QSH oder Qshell, der Unix-ähnliche Befehlsinterpreter Es ist in das System integriert. Viele haben es schon einmal beiläufig gesehen, insbesondere bei der Arbeit mit IFS- oder WebSphere-Aufgaben, aber es ist nicht immer klar, was genau es ist oder wie weit seine Möglichkeiten reichen.
In diesem Artikel werden wir das ganz ruhig aufschlüsseln. Was ist QSH/Qshell, wofür wird es in IBM i verwendet und wie kann es Ihnen helfen? Dies umfasst sowohl die Automatisierung von Aufgaben (z. B. das Auflisten von Dateien aus dem IFS und deren Kopieren in ein physisches Archiv) als auch komplexere Szenarien mit Java, WebSphere oder iSeries Access for Web. Wir verwenden eine leicht verständliche Sprache, vermeiden unnötigen Fachjargon und gehen dennoch auf die technischen Details ein, damit Sie die Inhalte wirklich nutzen können.
Was ist QSH oder Qshell auf IBM i?
Wenn wir von QSH oder Qshell sprechen, meinen wir die POSIX-Shell-Interpreter, den IBM in IBM i integriert hatEs handelt sich, einfach ausgedrückt, um eine „Unix-ähnliche Shell“, die innerhalb des Systems läuft und es Ihnen ermöglicht, Befehle auszuführen, die denen unter Linux sehr ähnlich sind (wie zum Beispiel …). ls, cdusw.) in der IBM i-Umgebung.
Diese Umgebung ist Teil dessen, was IBM als … bezeichnet. i5/OS PASE (Portable Application Solutions Environment)PASE ist eine Schicht, die mit den POSIX- und X/Open-Standards kompatible Hilfsprogramme und Anwendungen bereitstellt. Dank PASE bietet Qshell eine recht umfangreiche Sammlung von Werkzeugen, die sich sehr ähnlich verhalten wie die in einem klassischen Unix-System.
In der Praxis fungiert Qshell als Brücke zwischen der traditionellen Welt von IBM i (Bibliotheken, physische Archive, CL) und die modernere, offene Welt der Verzeichnisse, IFS-Pfade und Unix-Befehle. Dies eröffnet die Möglichkeit für sehr flexible Lösungen, insbesondere bei der Kombination von Shell-Befehlen mit CL- oder RPG-Programmen.
Es ist wichtig zu verstehen, dass Qshell kein Spielzeug oder eine Kuriosität ist: Es integriert sich tief in IBM i und nutzt die APIs des Systems.Tatsächlich laufen viele IBM io-Dienstprogramme und zugehörige Produkte (wie WebSphere oder Java-Tools) auf PASE und nutzen dasselbe Ökosystem.
QSH in der i5/OS-Umgebung bestanden
Die PASE-Umgebung ist für die Bereitstellung auf IBM i verantwortlich. Programme, die den POSIX- und X/Open-Standards folgenQshell ist als POSIX-Interpreter Teil dieses Sets und profitiert von allen Bibliotheken und Werkzeugen, die PASE zur Verfügung stellt.
Wenn Sie Qshell starten, wird ein Interpreter gestartet, der Befehle und Programme ausführt. als ob Sie sich in einem kleinen Unix-System innerhalb eines IBM i befänden.Dazu gehören grundlegende Dinge wie das Arbeiten mit IFS-Pfaden unter Verwendung von "/Verzeichnis/Unterverzeichnis", die Verwendung von Pipes, Weiterleitungen und einfachen Skripten.
IBM unterhält eine recht umfassende Dokumentation zu Qshell und PASE in seinen IBM WissenszentrumWenn Sie alle Möglichkeiten, Befehlsoptionen und Besonderheiten je nach Systemversion (z. B. V6.1) sehen möchten, konsultieren Sie am besten das Handbuch für die exakte Version von IBM i, die Sie installiert haben.
Darüber hinaus umfasst diese Umgebung auch alles, was mit Java, Anwendungsservern wie WebSphere und zugehörigen Hilfsprogrammen zu tun hat. Häufig treten Fehlermeldungen oder Warnungen im Zusammenhang mit … auf. QSH0006 oder QSH0007Im Wesentlichen geschehen Dinge in PASE oder Java, die die Funktionsweise der Shell oder der von ihr gestarteten Prozesse beeinflussen.
Praktisches Beispiel: Auflisten von IFS-Dateien mit QSH und CL
Eine der praktischsten (und häufigsten) Anwendungen von Qshell in realen IBM i-Umgebungen ist die Mit dem IFS arbeiten, um Dateien aufzulisten und diese Informationen auszugeben in eine physische Datei, die wir dann mit CL, RPG oder anderen Programmen verarbeiten können.
Stellen Sie sich vor, Sie haben einen IFS-Ordner, zum Beispiel /FTPwo Dateien mit der entsprechenden Dateiendung abgelegt werden. .cbsSie möchten die vollständige Liste aller dieser Dateien, einschließlich der Dateien in Unterverzeichnissen, in einer physischen Bibliotheksdatei erhalten, um sie dann einzeln verarbeiten zu können.
Eine sehr einfache Möglichkeit hierfür besteht darin, einige CL-Anweisungen mit einem Qshell-Befehl zu kombinieren, der den Befehl verwendet. ls-R um rekursiv aufzulisten. Die Idee ist:
1. Erstellen Sie eine physische Datei wo Sie das Ergebnis speichern werden:
CRTPF-Datei (Bibliothek/Archiv) RCDLEN (1024)
Dadurch wird ein PF mit einem ausreichend großen Register erzeugt (zum Beispiel, 1024 Byte lang) wobei jede vom Befehl zurückgegebene Zeile gespeichert wird ls Dadurch wird Qshell gestartet. Falls die Datei bereits existiert, können Sie den Fehler mit einer Fehlerbehandlung abfangen. MONMSG damit der Prozess nicht zusammenbricht.
Sie können dann Folgendes hinzufügen:
MONMSG MSGID(CPF0000)
Somit wenn die Dateierstellung aus irgendeinem Grund fehlschlägtSie erfassen die allgemeine Fehlermeldung und können dann entscheiden, was zu tun ist (im einfachsten Beispiel wird das Problem jedoch einfach ignoriert).
Im nächsten Schritt weisen Sie den Befehl, den Sie in Qshell ausführen möchten, einer CL-Variablen zu. Etwa so:
2. Bereiten Sie den Shell-Befehl vor, den Sie ausführen möchten.zum Beispiel:
CHGVAR VAR(&CMD) VALUE('ls -R /FTP/*.cbs > /qsys.lib/libreria.lib/archivo.file/archivo.mbr')
Und jetzt wird es interessant: Du sagst, man soll es ausführen. ls-R auf der Strecke /FTP alle Dateien auflisten, die dem Muster entsprechen *.cbsund Sie leiten auch die Standardausgabe an das Mitglied um ARCHIV aus der physischen Datei BUCHHANDLUNG/ARCHIV Verwendung der IFS-Syntax /qsys.lib/…Somit kümmert sich Qshell um das Erstellen der Liste und das direkte Ausgeben dieser Liste an die PF.
Sobald der Befehl definiert ist, muss er nur noch in Qshell ausgeführt werden:
3. Führen Sie den Befehl in Qshell aus. mit:
STRQSH CMD(&CMD)
Der Befehl STRQSH Starten Sie eine Qshell-Sitzung und führen Sie den Inhalt der Variablen aus. &CMDAus Sicht des CL-Benutzers ist es eine recht bequeme Möglichkeit, kurzzeitig in die POSIX-Welt einzutauchen, die Aufgabe zu erledigen und dann zu CL zurückzukehren.
Schließlich können Sie mögliche Fehler, die Qshell auslöst, mit Folgendem behandeln:
MONMSG MSGID(CPF0000 QSH0006 QSH0007) EXEC(DO)
(FEHLERBEHANDLUNG)
ENDDO
Auf diese Weise kann im Falle eines allgemeinen Systemproblems (CPF0000) oder einer der typischen Qshell-Fehler (QSH0006, QSH0007), gelangen Sie in einen Fehlerbehandlungsblock, in dem Sie beispielsweise den Fehler protokollieren, eine Nachricht an den Bediener senden oder Entscheidungen auf der Grundlage des zurückgegebenen Codes treffen können.
Wenn alles gut geht, hat der Qshell-Interpreter eine physische Datei hinterlassen. BUCHHANDLUNG/ARCHIV die vollständige Liste der Dateien .cbs Die Ergebnisliste kann anschließend von einem anderen CL- oder RPG-Programm weiterverarbeitet werden. Dieser Ansatz demonstriert wie leistungsstark die Kombination von traditionellen CL-Befehlen mit Qshell-Befehlen ist für bestimmte Aufgaben, die andernfalls wesentlich umständlicher wären.
Möglichkeiten und Leistungsfähigkeit von Qshell jenseits des Beispiels
Das vorherige Beispiel kratzt nur an der Oberfläche: Qshell akzeptiert viele Parameter und Befehle., sowohl einheimische als auch aus der Unix-Welt übernommene. Im Falle von lsSie können mit Optionen wie diesen experimentieren. -R für Rekursion, Auflistungsformate, Filter usw. Aber das ist nur der sichtbarste Teil.
Im Allgemeinen ermöglicht Ihnen Qshell den Aufbau von leichte und spezifische Lösungen für Alltagsprobleme: Dateien im IFS verschieben, Listen generieren, Ausgaben mithilfe von Pipes verketten, kleine Wartungsaufgaben automatisieren oder sogar als Zwischenschicht zwischen Batch-Prozessen und externen Anwendungen dienen.
Ein großer Vorteil ist, dass Sie können Qshell aus der CL aufrufen (mit STRQSH).Kombinieren Sie es mit Systembefehlen und behalten Sie die Hauptlogik in IBM i-Programmen bei, während Sie die Unix-artigen Operationen, die sich dort bequemer eingeben lassen, an die Shell delegieren.
Falls Sie alle verfügbaren Optionen genauer untersuchen möchten, bietet IBM für jede Systemversion eine spezifische Dokumentation an. IBM Wissenszentrum In Version 6.1 finden Sie beispielsweise Details zu jedem Befehl, seinen Parametern, Anwendungsbeispielen und Hinweisen zur Kompatibilität. Idealerweise sollten Sie diese Referenz konsultieren, um neue Hilfsprogramme zu entdecken, die Sie möglicherweise bereits installiert, aber noch nicht verwendet haben.
Es ist zu beachten, dass Qshell nicht die einzige Unix-ähnliche Umgebungsoption auf IBM i ist (es gibt auch die Umgebung QP2TERM und bietet die „reinste“ PASE-Unterstützung), aber es ist auch eine der zugänglichsten Lösungen für Administratoren und Entwickler aus der CL- oder RPG-Welt, die ohne allzu große Komplikationen mit IFS- und POSIX-Tools arbeiten möchten.
Schreiben von Skripten und Parametern in Qshell
Zusätzlich zur Ausführung einzelner Befehle können Sie mit Qshell Folgendes tun: Schreiben Sie Ihre eigenen Skripte Diese Skripte verhalten sich ähnlich wie die einer klassischen Shell. Sie können Parameter empfangen, Variablen verwenden und Befehle dynamisch zusammensetzen, sodass Sie wiederkehrende Aufgaben automatisieren können, ohne den Code jedes Mal neu schreiben zu müssen.
In einem Qshell-Skript werden die empfangenen Argumente speziellen Variablen zugewiesen: $1 für den ersten Parameter, $2 für die zweite und so weiter bis zu einem Maximum von 255 ParameterMit anderen Worten: Wenn Sie ein Skript ausführen und mehrere Werte übergeben, können Sie diese innerhalb des Skripts selbst verwenden, um Pfade, Dateinamen oder alles andere zu erstellen, was Sie benötigen.
Beispielsweise könnte man ein Skript haben, das den Namen eines auszuführenden Befehls als ersten Parameter erhält und diesen vor der Ausführung des Befehls anzeigt. Etwas ganz Einfaches wie:
Echo $ 1
$1 # führt den im ersten Parameter enthaltenen Befehl aus
Dieses kleine Beispiel veranschaulicht, wie Ein Skript kann als "Wrapper" für andere Befehle fungieren., indem vor der Ausführung des eigentlichen Befehls zusätzliche Logik (z. B. Validierungen oder Traces) hinzugefügt wird.
Um Parametern innerhalb des Skripts Werte zuzuweisen, können Sie den Befehl verwenden. kompensieren. Zum Beispiel:
set v1 v2 # Weisen Sie v1 $1 und v2 $2 zu
Auf diese Weise können Sie, ohne das Skript von außen erneut aufrufen zu müssen, die intern zu verarbeitenden Werte neu anordnen. Dies ist beispielsweise nützlich, um die Reihenfolge der Argumente neu zu definieren oder Standardwerte festzulegen.
Ein weiterer interessanter Befehl ist verschiebenwodurch die Parameter nach links verschoben werden: 1 Dollar verschwindet, 2 Dollar werden zu 1 Dollar, 3 Dollar werden zu 2 DollarUnd so weiter. Es handelt sich um eine klassische Skripttechnik, um Argumentlisten nacheinander zu durchlaufen und jeweils das erste Argument zu entfernen.
Darüber hinaus gibt es die Variable $0Diese Datei enthält den Namen des Skripts selbst. Dadurch können Sie beispielsweise Hilfemeldungen anzeigen, die den tatsächlichen Skriptnamen enthalten, ohne ihn manuell eingeben zu müssen, oder das Verhalten je nach Aufrufart anpassen.
Zusammengenommen machen diese Möglichkeiten Qshell zu einem Ein sehr flexibles Werkzeug zum Zusammenbau kleiner Automatisierungssysteme die auf dem IFS arbeiten, Systembefehle aufrufen oder IBM i-Prozesse mit externen Anwendungen integrieren.
Beziehung von Qshell zu WebSphere, Java und Speichernutzung
Obwohl Qshell oft nur als Befehlsinterpreter für das IFS angesehen wird, scheint es im täglichen Gebrauch auf IBM i auch eng mit … verbunden zu sein. Java-Umgebung und Anwendungsserver wie WebSphereDies wird besonders deutlich, wenn Systemmeldungen im Zusammenhang mit der Java-Speicher- oder Heap-Nutzung auftreten.
In Umgebungen, in denen es verwendet wird iSeries Access for Web (IWA)Bei der Bereitstellung auf WebSphere (z. B. WAS 6.1) treten häufig Meldungen wie die folgenden auf:
JAVA NUTZTE 95% DES GC-HEAP.
VERWENDETE HEAP-GRÖSSE (KB) UND MAXIMALE HEAP-GRÖSSE (KB): 249049 262144.
Diese Art von Warnungen stammt üblicherweise vom WebSphere-Server (nicht direkt von Qshell), kann aber von Meldungen zu PASE oder von Qshell gestarteten Prozessen begleitet sein. Im Wesentlichen teilt Ihnen das System Folgendes mit: Die JVM steht kurz davor, den Heap-Speicher vollständig zu belegen.und dass es ratsam ist, die Konfiguration anzupassen, bevor der Server mit einem OutOfMemory-Fehler abstürzt.
IBM hat diese Art von Meldungen genau deshalb eingeführt, damit der Administrator … eine Warnung vor dem Absturz des AnwendungsserversWenn Sie also diese wiederholten Warnungen erhalten, ist dies ein klares Anzeichen dafür, dass Sie die maximalen Heap-Parameter überprüfen sollten, die der JVM zugewiesen sind, auf der IWA oder das zugehörige Portal ausgeführt wird.
In einigen realen Fällen haben Administratoren festgestellt, dass selbst bei einem Portal, auf dem scheinbar keine Benutzer angemeldet waren, weiterhin Daten generiert wurden. 2 oder 3 Nachrichten pro Tag aus einem fast vollen StapelDies liegt üblicherweise an internen Anwendungsprozessen, Hintergrundaufgaben oder Speicherlecks, die den Heap auch dann in Gebrauch halten, wenn keine Benutzerlast vorhanden ist.
Darüber hinaus gab es Situationen, in denen es sogar schwierig war Greifen Sie über das Web auf die Administrationskonsole zu. Um Parameter wie die minimale und maximale Größe der JVM zu ändern, da bestimmte Portlets beim Öffnen der Konfigurationsbildschirme nicht funktionierten („abstürzten“).
Eine Strategie, die sich als nützlich erwiesen hat, beinhaltet Starten Sie die Umgebung (Server, WebSphere, Portal usw.) vollständig neu.Warten Sie, bis sich alles stabilisiert hat, und melden Sie sich dann an der Administrationskonsole an, um die Speicherkonfiguration zu überprüfen. In manchen Fällen sind die Felder für minimalen und maximalen Heap-Speicher leer und verwenden Standardwerte, was für Umgebungen mit hoher Last nicht immer optimal ist.
Nachdem sie Zugriff erhalten hatten, haben einige Administratoren beispielsweise Folgendes definiert: Minimale Heap-Größe von 512 MB und maximale Größe von 1024 MB (einfach als Testwerte), um zu sehen, ob sich das Systemverhalten verbessert und Warnmeldungen reduziert werden. Es ist jedoch wichtig, diese Werte an die Systemumgebung anzupassen. verfügbarer Speicher auf dem IBM i selbst und die Art der Last, die der Server unterstützt.
In diesem gesamten Kontext sind die spezifischen Meldungen über „JAVA NUTZTE 95 % DES GC-HEAP“ zwar relevant, aber WebSphere-FunktionenDie PASE-Umgebung und Qshell könnten indirekt beteiligt sein, da viele Tools und Skripte Java-Prozesse starten oder mit Diensten interagieren, die auf demselben Server bereitgestellt sind.
WebSphere-Einstellungen, IWA und Versionen auf IBM i V6R1
Wenn Sie in Umgebungen wie z. B. auf Leistungs- oder Speicherprobleme stoßen iSeries Access for Web (IWA) auf IBM i V6R1Es ist wichtig, in Bezug auf Versionen und Kompatibilität mit WebSphere Klarheit zu schaffen, denn hier laufen Qshell, PASE, Java und die Serverkonfiguration zusammen.
Zunächst empfiehlt es sich, Folgendes zu überprüfen: Welche genaue Version von iSeries Access for Web ist bei Ihnen installiert?Dies lässt sich in der Regel durch einen Blick auf die entsprechende Webseite überprüfen. /webaccess/iWAInfo die Anwendung selbst anzeigt. Dort sehen Sie die aktuelle IWA-Stufe.
Im konkreten Fall von IBM i V6.1 gab es ein größeres Update, das durch die PTF-Nummer gekennzeichnet ist. SI44342Dies entspricht der aktuellsten verfügbaren Version für diese Veröffentlichung. Durch die Aktualisierung von IWA auf diesem Stand (oder dem aktuellen Stand in Ihrer Umgebung) lassen sich viele Stabilitäts- oder Speicherprobleme beheben, die im Laufe der Zeit behoben wurden.
Andererseits ist es bei der Verwendung des Begriffs „Portal“ in diesem Kontext wichtig zu unterscheiden, ob man sich genau darauf bezieht. IWA (iSeries Access for Web) oder zu einem WebSphere Portal Vollständig. Obwohl beide auf IBM i parallel betrieben werden können, unterscheiden sich ihre Konfigurations- und Speicheranforderungen, und die Symptome eines Fehlers (Portlets, die nicht geladen werden, Fehlermeldungen, extreme Langsamkeit) können verwirrend sein, wenn man nicht genau weiß, mit welchem Produkt man es zu tun hat.
Ein Schlüsselaspekt ist der Servertyp, auf dem IWA eingesetzt wird: Es kann ein WebSphere Application Server 6.1, 7.0, ein Portal oder ein interner ServerDie JVM-Parameter variieren je nach Servertyp, der jeweiligen Version und auch dem Typ der verwendeten Java Virtual Machine (zum Beispiel die klassische "classic" oder die modernere J9).
Wenn ständig Meldungen wie „Heap fast voll“ angezeigt werden, sollten Sie neben der Überprüfung Ihrer Speicherparameter auch in Betracht ziehen, ob Ihnen eine wichtige Funktion fehlt. Zusätzliche PTFs oder sogar ein Versionsupdate des Portals selbst oder von WebSphereBei IBM i V6R1 gibt es eine Beschränkung für die Version von iWAS, auf die Sie aktualisieren können. Daher wird empfohlen, in der offiziellen Dokumentation nachzusehen, um die neueste unterstützte Kombination für Ihre Version zu finden.
Zusammenfassend lässt sich sagen: Wenn in Ihrer IBM i V6R1-Umgebung mit auf WebSphere bereitgestelltem IWA 6.1 Speicherprobleme auftreten, sollten Sie eine Blockprüfung durchführen. Heap-Konfiguration, IWA PTF-Level, genaue WebSphere-Version und JVM-TypNur so erhalten Sie ein vollständiges Bild des Problems und können es entsprechend anpassen, ohne auf gelegentliche Neustarts beschränkt zu sein.
All dies steht in indirektem Zusammenhang mit Qshell, da es über Skripte und Befehle in der PASE-Umgebung erfolgt. Sie können Prozesse überwachen, Hilfsaufgaben starten oder sogar Wartungsarbeiten automatisieren. die dazu beitragen, dass der Server in einem guten Betriebszustand bleibt, von der Bereinigung von Dateien im IFS bis hin zur Generierung von Protokolllisten für die Analyse.
Im Laufe dieser Reise haben wir gesehen, wie Qshell in IBM i integriert wird als ein POSIX-Interpreter, der die Fähigkeiten des Systems erweitertQSH ermöglicht einfache Aufgaben wie das Auflisten von IFS-Dateien und das Schreiben der Ausgabe in eine physische Datei und kann sogar als Komponente in komplexen Java- und WebSphere-Umgebungen eingesetzt werden. Um QSH effektiv zu nutzen, ist ein fundiertes Verständnis seiner Rolle innerhalb von PASE, die Vertrautheit mit Befehlen wie `ls`, `set` und `shift` sowie die Fähigkeit zur Kombination mit CL und klassischen IBM i-Tools erforderlich. So wird QSH zu einem wertvollen Helfer für Administratoren und Entwickler, die das Potenzial der Plattform voll ausschöpfen möchten.
Leidenschaftlicher Autor über die Welt der Bytes und der Technologie im Allgemeinen. Ich liebe es, mein Wissen durch Schreiben zu teilen, und genau das werde ich in diesem Blog tun und Ihnen die interessantesten Dinge über Gadgets, Software, Hardware, technologische Trends und mehr zeigen. Mein Ziel ist es, Ihnen dabei zu helfen, sich auf einfache und unterhaltsame Weise in der digitalen Welt zurechtzufinden.