Anmelden

View Full Version : QSHELL Log mit unlesbaren Zeichen



Seiten : [1] 2

hteufl
07-02-23, 12:53
Hallo,

ich benötige wieder die Hilfe des Forums. Wir übertragen sFTP Daten per CL-Programm zu einem Partner. Die Datenübertragung funktioniert einwandfrei, nur beim Logging haben wir ein Problem, dass die QSH Befehle unlesbare Zeichen ins Log eintragen! Das Log liegt im IFS und wurde mit 1252 bzw. 819 Codepage erstellt (ohne Änderung).

Hier ein Beispiel:
2023-02-07-13.35.37.951605 | Kontrolle TCPSVR SERVER(*SSHD)
2023-02-07-13.35.43.393914 | Setzen der Umgebungsvariable QIBM_QSH_CMD_OUTPUT
2023-02-07-13.36.00.354156 | Setzen Passwortscript
ñõöøôöñóòù÷òõ2023-02-07-13.36.45.989022 | Daten an Guglerserver übertragen
Ö••…ƒ£…„@£–@ôöKóðKöðKöð K%¢†£—n@”—¤£@aÆÆ×¤‚“‰ƒa×Ä ÆÁ¤¢‡‚…aÓÅÒÓaÆã×aÓÅ\%ä—“ –„‰•‡@aÆÆ×¤‚“‰ƒa×ÄÆÁ¤ ‡‚…aÓÅÒÓaÆã×aÓÅððñð÷õK×Ä Æ@£–@aÓÅððñð÷õK×ÄÆ%ä—“–„ ‰•‡@aÆÆ×¤‚“‰ƒa×ÄÆÁ¤¢‡ …aÓÅÒÓaÆã×aÓÅððñð÷öK×ÄÆ@£– @aÓÅððñð÷öK×ÄÆ%ä—“–

Die QSH Befehle im CL sind wie folgt aufgebaut:
STRTCPSVR SERVER(*SSHD)
QSH CMD('LANG=/QSYS.LIB/DE_DE_E.LOCALE ') testweise eingebaut
QSH CMD('QIBM_CCSID=1252') testweise eingebaut
ADDENVVAR ENVVAR(QIBM_QSH_CMD_OUTPUT)
VALUE('FILEAPPEND=/home/Gugler/QSHELL_output')
LEVEL(*JOB) REPLACE(*YES) CCSID(1252) ... (CCSID wurde einmal angegeben einmal nicht)
QSH CMD('/home/Gugler/openssh_password_script.sh')
QSH CMD('exec /QOpenSys/usr/bin/ksh -c
"/home/Gugler/batch_leistungserklaerungen_sftp_script.sh")

Vielleicht finded sich ein UNIX/QSHELL Spezialist der mir diesbezüglich Tipps geben kann!

Vielen Dank im Voraus
Hermann

Fuerchau
07-02-23, 14:10
Und welche CCSID hat dein Job? Bei 65535 weiß er nicht wie umgewandelt werden soll.
Schau dir im IFS die Daten mal mit F11? (Hex) an. Es scheint EBCDIC statt ANSI zu sein.

Andreas_Prouza
07-02-23, 17:59
Grundsätzlich versuche ich soweit es geht auf UTF-8 (CCSID 1208) zu setzen um Probleme mit Sonderzeichen & Co zu vermeiden.
Die Sonderzeichen die du hast sehen für mich etwas seltsam aus.
Wer produziert das Logging?
Oft werden die Daten einfach auf die Konsole geschrieben und die kann man dann in eine Datei umleiten lassen.
Ich verwende generell die Bash (/QOpenSys/pkgs/bin/bash).
In der Bash kannst du dann auch
cl "dspjob"
absetzen. Dort siehst du dann alle Details zu deiner Umgebung (z.B. QIBM_PASE_CCSID).

hteufl
08-02-23, 15:45
Hallo, und vielen Dank für Eure Antworten!

Ich versuche einmal Eure Fragen zu gut es geht zu beantworten:

ad Fuerchau) der codierte Zeichensatz des Jobs ist 1141
ad Andreas) wir haben schon eine IFS-Logdatei mit Zeichensatz 1208 erstellt. Das hat auch funktioniert. Nur beim öffnen der Protokolldatei erhielten wir danach einen Umsetzungsfehler und das Programm hat abgebrochen. Auch der OpsNav hat den Zeichensatz nicht korrekt angezeigt.

Die lesbaren Texte im Log kommen aus einem CL Programm welches per RPG Modul die Daten in das Log schreibt. Die unlesbaren Daten kommen dezidiert vom QSHELL (Passwortscript und Batch Script).
Bezüglich /QOpenSys/pkgs/bin/bash muss ich mich erst schlau machen.

Danke
Hermann

Fuerchau
08-02-23, 16:21
Das "@"-Zeichen (x'40') steht im EBCDIC für Blank. Also wird da wohl von einem Programm EBCDIC in die Datei kopiert. Hier ist zu prüfen, wo die Daten genau herkommen und welche CCSID die Quelldaten haben. Hier fehlt halt noch die Umwandlung.
Wenn das CL/RPG die Daten erstellt wird ggf. in EBCDIC ausgegeben.
Wenn die Daten zusammengeführt werden, sollte man in QSH mit "iconv" die Daten notfalls konvertieren.
https://www.ibm.com/docs/es/i/7.2?topic=data-iconv

Andreas_Prouza
08-02-23, 16:55
Wenn's EBCDIC ist, müsste man es via WRKLNK lesen können.

Fuerchau
08-02-23, 18:16
Auch WRKLNK kann das nur, wenn der Inhalt zur Codepage auch passt.
Es wird dabei auch nur die STMF-CCSID in die JOB-CCSID umgewandelt.
Wenn die Datei dann 1208 hat, wird @ x'40' dann zu @ x'C0'.

Andreas_Prouza
09-02-23, 06:34
Das lässt sich einfach testen indem man die CCSID der Datei auf z.B. 1141 ändert.

Fuerchau
09-02-23, 08:33
Dann kannst du zwar die EBCDIC-Daten lesbar machen, dafür sind die UTF8-Daten dann Schrott.
Man kann in eine IFS-Datei nicht sinnvoll unterschiedlichen Codepages schreiben

hteufl
10-02-23, 11:11
Hallo,

ich habe versucht WRKLNK die Daten am Greenscreen zu lesen, doch auch hier werden die Daten verstümmelt angezeigt.
Im OpsNav wird die Codepage 1252 angezeigt wobei der Eintrag für CCSID BLANK ist!
Wenn ich mit dem Befehl:
CHGATR OBJ('/home/gugler/QSHELL_output') ATR(*CCSID) VALUE(1141)
die CCSID ändere werden die Daten nicht "lesbarer".
Kann man im CL Programm QSHELL veranlassen die Daten in der richtigen CCSID bereitzustellen? Oder anders rum - welche Daten liefern die qsh Befehle?

Danke
Hermann